메소드를 호출하고 길이를 전달하고 임의의 영숫자 문자열을 생성하도록하고 싶습니다.
이러한 유형의 함수가 많은 유틸리티 라이브러리가 있습니까?
답변
빠르고 더러운 구현이 있습니다. 테스트되지 않았습니다.
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
중 하나임 ).8
9
A
B
문자열의 다른 모든 문자는 완전히 임의적이며 동일한 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를 생성 할 수도 있습니다. 실제로 무작위는 아니지만 복잡하고 독특하여 대부분의 용도에 무작위로 나타납니다. 하나를 문자열로 생성 한 다음 전달 된 길이와 동일한 문자 범위를 취하십시오.
