利用IMSI码区分手机网络运营商

时间:2022-11-18 19:50:34

资料内容转自*,笔记之。

国际移动用户识别码,即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")){
//联通
}
//电信、铁通如上
}