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")){
//中国电信
}
}

android 怎么判断手机号是移动还是联通相关推荐

  1. php 判断联通移动电信,JavaScript_JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单),正则表达式判断所填入号码的 - phpStudy...

    JavaScript判断手机号运营商是移动.联通.电信还是其他(代码简单) 正则表达式判断所填入号码的运营商js代码修改版:/article/31563.htm 在做WEB项目时,有时候需要根据用户的 ...

  2. php 判断联通移动电信,JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)...

    在做WEB项目时,有时候需要根据用户的输入手机号码判断该号的运营商是移动.联通.电信或其他,再根据不同的运营商做出相应的处理,下面介绍js中如何判断手机号的运营商的代码 纯js代码 var isChi ...

  3. php 判断联通移动电信,JavaScript判断手机号运营商是移动、联通、电信还是其他(代码简单)_javascript技巧...

    正则表达式判断所填入号码的运营商js代码修改版:http://www.jb51.net/article/31563.htm 在做WEB项目时,有时候需要根据用户的输入手机号码判断该号的运营商是移动.联 ...

  4. Android判断手机号格式邮箱格式

    java-正则表达式判断手机号 要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段, 故先要整清楚现在已经开放了多少个号码段,国家号码段分配如下: 移动:134.135 ...

  5. Android之判断网络状态(网络的连接,改变,和判断2G/3G/4G)

    现在app大多都需要从网络上获得数据.所以访问网络是在所难免.但是再访问网络之前,我们应该先做一下网络的状态判断.其实在访问网络之前我们要做一些状态判断,对应一些状态判断来做处理,并不是直接使用Htt ...

  6. php 运营商授权,PHP判断手机号运营商(详细介绍附代码)

    道理很简单,知道手机号规则 进行正则判断就可以 移动:134.135.136.137.138.139.150.151.157(TD).158.159.187.188 联通:130.131.132.15 ...

  7. java判断手机号_java使用正则表达式判断手机号的方法示例

    本文实例讲述了java使用正则表达式判断手机号的方法.分享给大家供大家参考,具体如下: 要更加准确的匹配手机号码只匹配11位数字是不够的,比如说就没有以144开始的号码段, 故先要整清楚现在已经开放了 ...

  8. java 判断手机运营商_如何用java判断手机号运营商?

    如何用java实现判断手机号的运营商?因为每个号段都是工信部规定划分给指定运营商的,所以我们可以通过手机号码的号段来判断. 现在手机号的号段那么多,要怎样方便的的判断呢?于是我们就想到了正则表达式,在 ...

  9. 判断手机号码vue_判断手机号运营商

    java 判断手机号运营商 /** * @Author guocongcong * @Date 2018/2/28 * @Describe 手机号工具类 */ public class PhoneUt ...

  10. java 判断手机运营商_JS正则表达式判断手机号所属运营商

    根据用户的输入手机号码判断该号的运营商是移动.联通.电信或其他,再根据不同的运营商做出相应的处理,下面介绍js中如何判断手机号的运营商的代码电话号码是电话管理部门为电话机设定的号码.一般7--8位数组 ...

最新文章

  1. 卡片式设计的最佳实践分享
  2. 【Web】Rest API 验证授权如何做?
  3. anaconda切换python版本及对应环境,太方便
  4. mac改终端前面的计算机名
  5. 简单易用的库存管理软件、进销存软件
  6. java一维数组的特点,数据结构:java数组特点以及声明数组类
  7. iOS如何判断当前网络的运营商
  8. np.expm1_JavaScript中带有示例的Math.expm1()方法
  9. windbg --sqlserver 实例 转
  10. MySQL的SQL预处理(Prepared)
  11. python两张图片融合_python实现两张图片的像素融合
  12. win7安装android驱动,Windows7:安卓智能手机刷机驱动安装教程(图文详解)
  13. Activex 部件不能创建对象 故障解决
  14. thinkpad e470外接显示器后无声音
  15. 影响网站排名的几大因素
  16. 利用四位共阳数码管显示小数
  17. Redis使用入门(二)【Windows下Python客户端redis-py使用】
  18. 软件设计师认证 -如何画数据流图
  19. 简述计算机桌面背景更换的流程,苹果电脑桌面壁纸怎么更换【详细步骤】
  20. 浮动广告代码在网页两侧

热门文章

  1. 【BZOJ5109】【CodePlus2017】大吉大利,晚上吃鸡!
  2. CTFshow-菜狗杯-misc(1-6)
  3. dell服务器型号t310,Dell T110/R210/T310/R310服务器 For Windows驱动程序
  4. android自动连接wifi,Android自动连接WiFi优先级规则,以及查看已连接WiFi的密码
  5. octet-stream文件怎么看
  6. 两个不同包里有相同的类
  7. (六)K8S中HostPath、EmptyDir、ConfigMap、Secret、Downward API用法
  8. Verilog HDL 编程语言接口
  9. MySQL从创建数据库到删库跑路之旅
  10. Exp2 后门原理与实践 ——20164316张子遥