본문 바로가기
IOS (Swift, Objective-c)

[IOS] Objective-C Random String, UUID

by bryan.oh 2022. 2. 6.
반응형

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
반응형

댓글