资料内容转自维基百科,笔记之。
国际移动用户识别码,即IMSI(International Mobile Subscriber Identity),它是在公众陆地移动电话网(PLMN)中用于唯一识别移动用户的一个号码。在GSM网络,这个号码通常被存放在SIM卡中。
从技术上讲,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+MIN
MCC:Mobile Country Code,行动装置国家代码,共3位,中国为460;
MNC:Mobile Network Code,移动设备网络代码,2位(欧洲标准)或3位(北美标准),中国电信CDMA系统使用03,一个典型的IMSI号码为460030912121001;
MIN共有10位,其结构如下:
09+M0M1M2M3+ABCD
其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。
可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别.
MCC | MNC | 品牌 | 运营商 | 使用状态 | 频段(MHz) | 参考和注释 |
460 | 00 | 中国移动 (China Mobile) | 中国移动 (China Mobile) | 营运中 | GSM 900 / GSM 1800 / TD-SCDMA 1880 / TD-SCDMA 2010 | |
460 | 01 | 中国联通 (China Unicom) | 中国联通 (China Unicom) | 营运中 | GSM 900 / GSM 1800 / UMTS 2100 | CDMA网络出售给中国电信,并在2009年5月试商用WCDMA网络,2009年10月开始全面投入商业运行。 |
460 | 02 | 中国移动 (China Mobile) | 中国移动 (China Mobile) | 营运中 | GSM 900 / GSM 1800 / TD-SCDMA 1880 / TD-SCDMA 2010 | |
460 | 03 | 中国电信 (China Telecom) | 中国电信 (China Telecom) | 营运中 | CDMA2000 800 / CDMA2000 2100 | EV-DO |
460 | 05 | 中国电信 (China Telecom) | 中国电信 (China Telecom) | 营运中 | | |
460 | 06 | 中国联通 (China Unicom) | 中国联通 (China Unicom) | 营运中 | GSM 900 / GSM 1800 / UMTS 2100 | |
460 | 07 | 中国移动 (China Mobile) | 中国移动 (China Mobile) | 营运中 | GSM 900 / GSM 1800 / TD-SCDMA 1880 / TD-SCDMA 2010 | |
460 | 20 | 中国铁通 (China Tietong) | 中国铁通 (China Tietong) | 营运中 | GSM-R | |
Android手机中IMSI码获取代码:
1.
TelephonyManager teleManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String imsi = teleManager.getSubscriberId(); //当前sim卡的IMSI码,使用时用startWith()方法判断前5位可区分国内运营商
if(!TextUtil.isEmpty(imsi)) {
if(imsi.startWith("46000") || imsi.startWith("46002") || imsi.startWith("46007")) {
//移动
} else if (imsi.startWith("46001") || imsi.startWith("46006")) {
//联通
}
//电信、铁通如上
}
2.
TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String mccmnc= telManager.getSimOperator(); //当前sim卡的MCC+MNC (mobile country code + mobile network code)码,使用时用equals()方法区分运营商
if(!TextUtil.isEmpty(mccmnc)) {
if(mccmnc.equals("46000") || mccmnc.equals("46002") || mccmnc.equals("46007")){
//移动
} else if (mccmnc.equals("46001") || mccmnc.equals("46006")){
//联通
}
//电信、铁通如上
}