經過調研,代碼實現獲取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 (國際移動設備標識)