SIM卡存儲的數據可分為四類:
第一類是固定存放的數據。這類數據在移動電話機被出售之前由SIM卡中心寫入,包括國際移動用戶識別號(IMSI)、鑒權密鑰(KI)、鑒權和加密算法等等。
第二類是暫時存放的有關網絡的數據。如位置區域識別碼(LAI)、移動用戶暫時識別碼(TMSI)、禁止接入的公共電話網代碼等。
第三類是相關的業務代碼,如個人識別碼(PIN)、解鎖碼(PUK)、計費費率等。
第四類是電話號碼簿,是手機用戶隨時輸入的電話號碼。用戶全部資料幾乎都存儲在SIM卡內,因此SIM卡又稱為用戶資料識別卡。
IMSI是一個唯一的數字, 標識了GSM和UMTS 網絡里的唯一一個用戶. 它存儲在手機的SIM卡里,它會通過手機發送到網絡上. IMSI 與 SIM唯一對應。從技術層面而言,手機的SIM卡上並不會存儲手機號碼信息,只會存儲IMSI(International Mobile Subscriber Identification Number)。手機號碼(MSISDN)都是登記在HLR(Home Location Register)中的,在HLR中會把IMSI和MSISDN關聯在一起。
IMEI也是一串唯一的數字, 標識了GSM 和 UMTS網絡里的唯一一個手機.它通常被打印在手機里電池下面的那一面,撥 *#06# 也能看到它. IMEI 與 設備唯一對應.
1)IMEI不存在於SIM卡中,它是手機本身的串號。
2)通常我們所說的手機號也不存在於SIM卡中,雖然SIM卡中有一個專門存儲SIM卡本身號碼的地方,但是此號碼是通過手工設定的,而且是可以更改的。 SIM卡的識別通常使用IMSI號,這個對於SIM卡是唯一的。
3)使用SimGetRecordInfo之類的函數獲得SIM卡的IMSI號碼能否成功依賴於設備制造商是否實現了此函數,據我所知在DOPOD的機器上是可以獲得,但是在聯想的機器上卻不行,其他機器沒有。
4)獲得IMEI以及IMSI可以通過RIL或者TAPI中的LINE操作的函數獲得。
下面給出獲取手機本機號碼的代碼:
TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
String deviceid = tm.getDeviceId();
String tel = tm.getLine1Number();//手機號碼
String imei = tm.getSimSerialNumber();
String imsi = tm.getSubscriberId();
添加權限:
注意,手機號碼不是所有的都能獲取。只是有一部分可以拿到。這個是由於移動運營商沒有把手機號碼的數據寫入到sim卡中。這個就像是一個變量,當移動運營商為它賦值了,它自然就會有值。不賦值自然為空。這就是為什么很多人得不到本機號碼的原因。
手機號碼不是所有的都能獲取。只是有一部分可以拿到。這個是由於移動運營商沒有把手機號碼的數據寫入到sim卡中.SIM卡只有唯一的編號,供網絡與設備識別那就是IMSI號碼,手機的信號也可以說是通過這個號碼在網絡中傳遞的,並不是手機號碼。試想,你的SIM卡丟失后,補辦一張新的會換號碼嗎?是不會的.就是因為在你的手機號碼對應的IMSI號 在移動運營商中被修改成新SIM卡的IMSI號碼。
那么手機號為什么有的就能顯示呢?
這個就像是一個變量,當移動運營商為它賦值了,它自然就會有值。不賦值自然為空。
對於移動的用戶,手機號碼(MDN)保存在運營商的服務器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些驗證信息。手機每次入網注冊的時候,都會以短信的形式將IMSI及驗證信息上傳到運營商的服務器,服務器在完成注冊動作之后,會以短信的形式將注冊的結果下發到手機里。下發的內容會因條件不同而不同。
如果服務器在下發的短信中,不包含手機的號碼,手機是無法取得電話號碼。如果短信中包含了號碼,手機才會將其緩存,以備他用.此外,對於其他運行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能夠取得本機號碼不太可能。
移動神州行,聯通的卡是可以取到的.動感地帶的取不到.別的卡還沒有試過.
能夠讀取SIM卡號的話應該有前提.那就是SIM卡已經寫入了本機號碼,不然是無法讀取的。
網絡上有朋友提出了下面的解決方案:
給10086發個短信就行了,然后獲取發件箱中的發件人號碼...反正給10086發短信或者打電話是免費的 ,但是你得注意了
1、獲取發件箱中的發件人號碼后你得把發件箱中記錄刪除;
2、就是你還要攔截10086給你回復的短信,不然會有個notification顯示在屏幕上方,提示10086發來個短信,讓你查看;
這些都是為了取得本機號碼的任務下,但同時又提高了用戶的體驗度...明白嗎?
但是,有很多人說在收到的短信中沒有收件人號碼,所以可能還是取不到手機號碼(還未測試過)
中國移動的SIM卡里只有IMSI號碼而沒有存儲手機號碼,在中國移動的HLR中會有一張映射表,專門用於把用戶手機SIM卡的IMSI號映射成為用戶的手機號碼,這就是移動丟卡不丟號的業務也就是緣於此,也是一卡多號的原理。而電信CDMA(原來聯通CDMA)的機卡合一的手機卡里會同時存在IMSI和手機號碼。
•客戶端獲取:在客戶端對移動用戶而言只能夠獲取諸如IMSI、IMEI號等,並不能直接獲得手機號。而對電信CDMA機卡合一用戶可以獲取手機號碼。
•服務器端獲取:在早期的移動白名單中是能夠獲得明文的手機號的,最近移動策略變了,手機號變成了天書般的唯一串號。因此目前從服務器端直接獲取手機號也不行了。
目前能夠想到的能夠相對可靠地自動獲取用戶手機號的方法只有通過短信方式。
•通過短信方式:讓用戶上行一條短信,通過短信網關獲取用戶手機號,從而將用戶id與手機號綁定
from:http://blog.csdn.net/aicpzl/article/details/51655133