IOS (Swift, Objective-c)
[IOS] Objective-C Random String, UUID
bryan.oh
2022. 2. 6. 18:39
반응형
Objective-C
Random String
UUID
UUID
NSString *uuid = [[NSUUID UUID] UUIDString];
NSLog(@"%@", uuid);
// 82B06C97-5CF5-455F-A21D-9FF1937A462E
NSProcessInfo
NSString *random1 = [[NSProcessInfo processInfo] globallyUniqueString];
NSLog(@"%@", random1);
// 2470F98E-1D28-4764-ADAF-283F8496705F-52948-0002A35E73AC9180
다른 방법
-(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;
}
// 사용
NSString *random2 = [self generateRandomString:10];
NSLog(@"%@", random2);
// mbdioaqqxj
지정된 길이의 랜덤한 영문 소문자가 나옵니다.
날짜 포함 생성방법
생성된 문자열이 정렬이 되려면 날짜를 추가하는 방법으로 생성해봤습니다.
-(NSString*)generateIdByDate{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyMMddHHmmssSSS"];
NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];
NSString *rand = [[[NSUUID UUID] UUIDString] componentsSeparatedByString: @"-"][0];
return [NSString stringWithFormat:@"%@%@", dateString, rand];
}
하지만, milliseconds 까지 같은 경우가 나올 수 있습니다.
중복은 나오지않겠지만, 순서가 바뀔수도 있겠네요.
순서대로 정렬이 필요하다면,
전역변수하나로 시퀀스한 변수를 만들어서 정렬이 되도록 해보겠습니다.
NSInteger idSeq = 0; // 전역변수로 추가
-(NSString*)generateIdByDate{
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyMMddHHmmssSSS"];
NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];
NSString *rand = [[[NSUUID UUID] UUIDString] componentsSeparatedByString: @"-"][0];
idSeq = idSeq >= 9 ? 0 : idSeq+1;
return [NSString stringWithFormat:@"%@%li%@", dateString, idSeq, rand];
}
정렬이 잘 되겠네요. 만약에 10개로 부족하다면, 한자리 더 늘려서 1부터 99까지 하시고, 1의자리는 01, 02.. 로 앞에 0을 붙혀서 사용하면 될거같습니다.
728x90
반응형