资料内容转自维基百科,笔记之。

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