IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的”电子串号”,它与每台手机一一对应,而且该码是全世界唯一的。每一部手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。手机用户可以在手机中查到自己手机的IMEI码。 iOS5以后不能再获取了。

UDID是Unique Device Identifier的缩写,是一串由40位16进制数组成的字符串,用以标识唯一的设备,苹果从iOS5开始就移除了通过代码访问UDID的权限,应用试图获取UDID被禁止且不允许上架。现在想通过代码获取是不可能的了,如果你想看看你设备的UDID,可以通过iTunes来查看。对于已越狱了的设备,UDID并不是唯一的.使用Cydia插件UDIDFaker,可以为每一个应用分配不同的UDID.
那么有没有另外的办法来获取用户设备的唯一标识符呢?答案是有的,当然这样的标识符不是苹果隐藏的UDID了,使用OpenUDID开源代码,这个代码通过一些特殊的算法,创建了每一个设备的唯一标识符,你可以拿过来用来识别设备了。

UUID是Universally Unique Identifier的缩写,通过调用[[UIDevice currentDevice]identifierForVendor];
方法可以获取UUID。只要用户没有完全删除应用程序,则这个UUID在用户使用该应用程序的时候一直保持不变。如果用户删除了这个应用程序,然后再重新安装,那么这个UUID已经发生了改变。
deviceToken的原理跟UUID差不多,如果用户删除了这个应用程序,然后再重新安装,那么这个deviceToken已经发生了改变。
我们现在的程序中后台如果需要传入用户设备标识,一般我们取UUID来传入。最理想的就是保存在keychain里面,以此作为标识用户设备的唯一标识符。

直接获取的UUID系统不会存储,每次调用的时候都会获得一个新的UUID标示符
可以使用keychain永久保存达到udid的效果

CFUUIDRef puuid = CFUUIDCreate( nil );
    CFStringRef uuidString = CFUUIDCreateString(nil, puuid);
    NSString *result = (NSString *)CFBridgingRelease(CFStringCreateCopy( NULL, uuidString));
    NSLog(@"uuuid==>%@",result);