博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取UIDevice的uniqueIdentifier替代方法
阅读量:5292 次
发布时间:2019-06-14

本文共 2088 字,大约阅读时间需要 6 分钟。

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/archive/2012/12/02/2798571.html

你可能感兴趣的文章
[Flex] flex手机项目如何限制横竖屏?只允许横屏?
查看>>
tensorflow的graph和session
查看>>
JavaScript动画打开半透明提示层
查看>>
Mybatis生成resulteMap时的注意事项
查看>>
jquery-jqzoom 插件 用例
查看>>
1007. Maximum Subsequence Sum (25)
查看>>
iframe的父子层跨域 用了百度的postMessage()方法
查看>>
Js apply方法与call方法详解 附ES6新写法
查看>>
linux php全能环境一键安装,小白福利!
查看>>
图片生成缩略图
查看>>
关于Mysql select语句中拼接字符串的记录
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>