获取UIDevice的uniqueIdentifier替代方法

1.通过调用CFFUUIDCreate函数来生成机器唯一标识符,但每次调用以下函数返回的字符串都不一样,所以第一次调用后需把该字符串存储起来。这是官方API的建议方法

- (NSString *) uniqueString

{

CFUUIDRef unique = CFUUIDCreate(kCFAllocatorDefault);

NSString *result = [(NSString *)CFUUIDCreateString(kCFAllocatorDefault, unique) autorelease];

CFRelease(unique);

return result;

}


2.由于机器的mac地址都不一样,所以可通过获取mac地址后再进行md5加密处理后返回的字符串作为唯一标识码

- (NSString *) macaddress{

    

    int                 mib[6];

    size_t              len;

    char                *buf;

    unsigned char       *ptr;

    struct if_msghdr    *ifm;

    struct sockaddr_dl  *sdl;

    

    mib[0] = CTL_NET;

    mib[1] = AF_ROUTE;

    mib[2] = 0;

    mib[3] = AF_LINK;

    mib[4] = NET_RT_IFLIST;

    

    if ((mib[5] = if_nametoindex("en0")) == 0) {

        printf("Error: if_nametoindex error\n");

        return NULL;

    }

    

    if (sysctl(mib, 6NULL, &len, NULL0) < 0) {

        printf("Error: sysctl, take 1\n");

        return NULL;

    }

    

    if ((buf = malloc(len)) == NULL) {

        printf("Could not allocate memory. error!\n");

        return NULL;

    }

    

    if (sysctl(mib, 6, buf, &len, NULL0) < 0) {

        printf("Error: sysctl, take 2");

        return NULL;

    }

    

    ifm = (struct if_msghdr *)buf;

    sdl = (struct sockaddr_dl *)(ifm + 1);

    ptr = (unsigned char *)LLADDR(sdl);

    NSString *outstring = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X"

                           *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];

    free(buf);

    

    return outstring;

}


- (NSString *) uniqueGlobalDeviceIdentifier{

    NSString *macaddress = [[UIDevice currentDevicemacaddress];

    NSString *uniqueIdentifier = [macaddress stringFromMD5];

    

    return uniqueIdentifier;

}


NSString类别

@implementation NSString(MD5Addition)


- (NSString *) stringFromMD5{

    

    if(self == nil || [self length] == 0)

        return nil;

    

    const char *value = [self UTF8String];

    

    unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];

    CC_MD5(value, strlen(value), outputBuffer);

    

    NSMutableString *outputString = [[NSMutableString allocinitWithCapacity:CC_MD5_DIGEST_LENGTH * 2];

    for(NSInteger count = 0; count < CC_MD5_DIGEST_LENGTH; count++){

        [outputString appendFormat:@"%02x",outputBuffer[count]];

    }

    

    return [outputString autorelease];

转http://blog.163.com/ray_jun/blog/static/1670536422011102744836300/ 

}

原文地址:https://www.cnblogs.com/likwo/p/2798571.html