您的位置:首页 > 移动开发 > Android开发

android 怎么判断手机号是移动还是联通

2018-01-20 14:38 956 查看


imei和imsi

imei、imsi是大部分应用自动采集的设备信息,Android中需要在MINIFEST声明权限,6.0以上手机还需要用户显示授权才可以正常获取。这两个标识有什么区别、联系?为什么应用这么执着于采集这两个信息呢?


imei

IMEI(International Mobile Equipment Identity,国际移动设备标识),imei与手机绑定。由15位数字组成,与每台移动设备一一对应,且该码全世界唯一。

imei结构:
TAC+FAC+SNR+SP


TAC(Type Approval Code):6位,型号核准号码,代表机型。

FAC(Final Assembly Code):2位,最后装配号,代表产地。
SNR(Serial Number):6位,出厂序号、串号,代表生产顺序号。
SP:1位,由厂家出厂设置,是校验码。

手机imei查看:****#06#****

imei由GSMA协会统一规划,并授权各地区组织进行分配。

imei和imsi存在一一对应关系,所以双卡双待手机有两个imei。


imsi

imsi(International Mobile Subscriber Identification Number)国际移动用户识别码,是区别移动用户的标识,存储在SIM(Subscriber Identity Module,用户识别模块)卡或者USIM(Universal Subscriber
Identity Module,全球用户身份模块)中。 长度不超过15位,由0-9数字组成。

imsi结构:
MCC+MNC+MSIN


MCC(Mobile Country Code,移动国家码):移动用户所属国家代号。MCC的资源由国际电信联盟(ITU,International Telecom Union)在全世界范围内统一分配和管理,唯一识别移动用户所属国家。MCC共3位,中国是460.

MNC(Mobile Network Code,移动网号码):用于识别用户所属移动通信网,2-3位。同一个国家内,如果有多个PLMN(Public Land Mobile Network,一般某个国家的一个PLMN对应一个MNC),可以通过MNC区分。

中国移动:00、02、04、07

中国联通:01、06、09

中国电信:03、05、11

中国铁通:20

业务中,一般使用MCC、MNC判断用户所属网络,也是智能DNS线路切换依据。

全球各国MCC、MNC参考

MSIN(Mobile Subscriber Identification Number,移动用户识别码)用于识别某一移动网络中的具体用户。共10位。结构如下:
EF+M0M1M2M3+ABCD


其中,EF由运营商分配,M0M1M2M3和MDN(Mobile Directory Number,移动号码簿)中的H0H1H2H3可以存在对应关系,ABCD则是自由分配的四位。

MSISDN(Mobile Station International Subscriber Directory Number)即手机号码。

IMSI是在GSM(Global System of Mobile Communications,全球移动通信系统)的唯一识别码,在全网和全球范围统一。IMSI相同的SIM卡、USIM卡可能是非法制造出来的。

怎么判断手机号是移动还是联通

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
/** 获取SIM卡的IMSI码
* SIM卡唯一标识:IMSI 国际移动用户识别码(IMSI:International Mobile Subscriber Identification Number)是区别移动用户的标志,
* 储存在SIM卡中,可用于区别移动用户的有效信息。IMSI由MCC、MNC、MSIN组成,其中MCC为移动国家号码,由3位数字组成,
* 唯一地识别移动客户所属的国家,我国为460;MNC为网络id,由2位数字组成,
* 用于识别移动客户所归属的移动网络,中国移动为00,中国联通为01,中国电信为03;MSIN为移动客户识别码,采用等长11位数字构成。
* 唯一地识别国内GSM移动通信网中移动客户。所以要区分是移动还是联通,只需取得SIM卡中的MNC字段即可
*/
String imsi = telManager.getSubscriberId();
if(imsi!=null){
if(imsi.startsWith("46000") || imsi.startsWith("46002")|| imsi.startsWith("46004")|| imsi.startsWith("46007")){//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号
//中国移动
}else if(imsi.startsWith("46001")||imsi.startsWith("46006")||imsi.startsWith("46009")){
//中国联通
}else if(imsi.startsWith("46003")||imsi.startsWith("46005")||imsi.startsWith("46011"){
//中国电信
}
}
第二种方法:

TelephonyManager telManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String operator = telManager.getSimOperator();
if(operator!=null){
if(operator.equals("46000") || operator.equals("46002") || operator.equals("46004") || operator.equals("46007")){
//中国移动
}else if(operator.equals("46001") || operator.equals("46006") || operator.equals("46009")){
//中国联通
}else if(operator.equals("46003") || operator.equals("46005") || operator.equals("46011")){
//中国电信
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  imei imsi 移动 联通 android