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 SubscriberIdentity 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")){ //中国电信 } }
相关文章推荐
- android代码判断当前手机的手机号码是属于移动、联通、还是电信的
- JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单
- JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)
- android代码判断当前手机的手机号码是属于移动、联通、还是电信的
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- js判断客户端是iOS还是Android等移动终端的方法
- android开发实例01:移动联通电信wap和net接入点判断
- java-正则表达式判断移动联通电信手机号
- js判断客户端是iOS还是Android等移动终端的方法
- js如何判断客户端是iOS还是Android等移动终端
- js判断客户端是iOS还是Android等移动终端的方法
- Android端如何获取手机当前的网络状态,比如wifi还是3G, 还是2G, 电信还是联通,还是移动
- [Android Pro] 通过IMSI判断手机是移动、联通、电信
- js如何判断客户端是iOS还是Android等移动终端
- js判断客户端是iOS还是Android等移动终端的方法
- android开发实例01:移动联通电信wap和net接入点判断
- android上获取imsi码,判断运营商信息(移动,联通,电信)
- 怎样判断手机号码是移动的还是联通的?