经过调研,代码实现获取iPhone手机串号是获取不到的,网上提供的一些获取手机串号都是通过第三方库来写的,使用这些库的app在app store是审核不了的,所以目前还没有办法获取手机串号imsi的。
既然iPhone手机的imsi获取不到,而在实际开发中我们需要代表iPhone手机唯一标志,所以官方提供方法将手机的uuid即手机设备号来作为标志。不过还有一个方案就是可以用iPhone手机的mac地址。
用uuid的时候,要注意使用系统提供的接口(UIDevice中),UiDevice中有两个方法可以获取uuid,一个获取的是40位的一个是36位的,但是36位的方法经过测试好像有bug,所以暂时不能用(参见 iOS SDK),听网上说到6.1版本后可以用,6.0的不能用,说明下这个方法就是6.0的,新的方法。另一个方法在5.0以下包括5.0可以用。
eg: NSString uuid = [[UIDevice currentDevice] uniqueIdentifier],说明的是这个方法获得uuid是不变的,不管在什么时候 。
还有一个获取uuid的是36位的,这个方法是创建一个uuid,意思就是说,会变的,如当应用程序卸掉后重新安装后,uuid会变的。
eg:CFUUIDRef deviceId = CFUUIDCreate (NULL);
CFStringRef deviceIdStringRef = CFUUIDCreateString(NULL,deviceId);
CFRelease(deviceId);
NSString *deviceIdString = (NSString *)deviceIdStringRef
我的建议还是用mac地址比较好。
-----------------------------------------------------------------------------------------------------------------------------------------
国际移动用户识别码(IMSI:International Mobile SubscriberIdentification Number)是区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。其总长度不超过15位,同样使用0~9的数字。其中MCC是移动用户所属国家代号,占3位数字,中国的MCC规定为460;MNC是移动网号码,最多由两位数字组成,用于识别移动用户所归属的移动通信网;MSIN是移动用户识别码,用以识别某一移动通信网中的移动用户。
国际移动用户识别码(IMSI) international mobile subscriber identity
国际上为唯一识别一个移动用户所分配的号码。
从技术上讲,IMSI可以彻底解决国际漫游问题。但是由于北美目前仍有大量的AMPS系统使用MIN号码,且北美的MDN和MIN采用相同的编号,系统已经无法更改,所以目前国际漫游暂时还是以MIN为主。其中以O和1打头的MIN资源称为IRM(International Roaming MIN),由IFAST (International Forum on ANSI-41 Standards Technology)统一管理。目前联通申请的IRM资源以09打头。可以看出,随着用户的增长,用于国际漫游的MIN资源将很快耗尽,全球统一采用IMSI标识用户势在必行。
结构组合
IMSI共有15位,其结构如下:
MCC+MNC+MSIN ,(MNC+MSIN=NMSI)
MCC:Mobile Country Code,移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460;
MNC:Mobile Network Code,移动网络码,共2位,中国移动GSM系统使用00、02,中国联通GSM系统使用01,中国电信CDMA系统使用03,中国移动TD系统使用07,一个典型的IMSI号码为460030912121001;
MSIN:Mobile Subscriber Identification Number共有10位,其结构如下:
EF+M0M1M2M3+ABCD
其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为*分配。
可以看出IMSI在MSIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个移动网络运营商,可以通过MNC来进行区别。
区别于IMEI:International Mobile Equipment Identity (国际移动设备标识)