[objective-c] 코코아에서 임의의 영숫자 문자열 생성

메소드를 호출하고 길이를 전달하고 임의의 영숫자 문자열을 생성하도록하고 싶습니다.

이러한 유형의 함수가 많은 유틸리티 라이브러리가 있습니까?



답변

빠르고 더러운 구현이 있습니다. 테스트되지 않았습니다.

NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";

-(NSString *) randomStringWithLength: (int) len {

    NSMutableString *randomString = [NSMutableString stringWithCapacity: len];

    for (int i=0; i<len; i++) {
         [randomString appendFormat: @"%C", [letters characterAtIndex: arc4random_uniform([letters length])]];
    }

    return randomString;
}


답변

정확히 당신이 묻는 것은 아니지만 여전히 유용합니다.

[[NSProcessInfo processInfo] globallyUniqueString]

샘플 출력 :

450FEA63-2286-4B49-8ACC-9822C7D4356B-1376-00000239A4AC4FD5


답변

NSString *alphabet  = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXZY0123456789";
NSMutableString *s = [NSMutableString stringWithCapacity:20];
for (NSUInteger i = 0U; i < 20; i++) {
    u_int32_t r = arc4random() % [alphabet length];
    unichar c = [alphabet characterAtIndex:r];
    [s appendFormat:@"%C", c];
}


답변

분명히 이것을 더 짧게 만들 수 있습니다.

+(NSString*)generateRandomString:(int)num {
    NSMutableString* string = [NSMutableString stringWithCapacity:num];
    for (int i = 0; i < num; i++) {
        [string appendFormat:@"%C", (unichar)('a' + arc4random_uniform(26))];
    }
    return string;
}


답변

16 진수 문자로만 자신을 제한하려는 경우 가장 간단한 옵션은 UUID를 생성하는 것입니다.

NSString *uuid = [NSUUID UUID].UUIDString;

출력 예 : 16E3DF0B-87B3-4162-A1A1-E03DB2F59654.

더 작은 임의의 문자열을 원하면 처음 8 자만 잡을 수 있습니다.

버전 4 UUID는 3 번째 및 4 번째 그룹의 첫 번째 문자가 무작위가 아님을 의미합니다 (항상 , 또는 , 4중 하나임 ).89AB

문자열의 다른 모든 문자는 완전히 임의적이며 동일한 UUID가 두 번 생성 될 위험없이 수백 년 동안 매초마다 수백만 개의 UUID를 생성 할 수 있습니다.


답변

Jeff B의 답변의 카테고리 버전입니다.

NSString + Random.h

#import <Foundation/Foundation.h>

@interface NSString (Random)

+ (NSString *)randomAlphanumericStringWithLength:(NSInteger)length;

@end

NSString + Random.m

#import "NSString+Random.h"

 @implementation NSString (Random)

+ (NSString *)randomAlphanumericStringWithLength:(NSInteger)length
{
    NSString *letters = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
    NSMutableString *randomString = [NSMutableString stringWithCapacity:length];

    for (int i = 0; i < length; i++) {
        [randomString appendFormat:@"%C", [letters characterAtIndex:arc4random() % [letters length]]];
    }

    return randomString;
}

@end


답변

UUID를 생성 할 수도 있습니다. 실제로 무작위는 아니지만 복잡하고 독특하여 대부분의 용도에 무작위로 나타납니다. 하나를 문자열로 생성 한 다음 전달 된 길이와 동일한 문자 범위를 취하십시오.