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")){//因为移动网络编号46000下的IMSI已经用完,所以虚拟了一个46002编号,134/159号段使用了此编号
//中国移动
}else if(imsi.startsWith("46001")){
//中国联通
}else if(imsi.startsWith("46003")){
//中国电信
}
}

IMSI:国际移动用户识别码(唯一标识),IMSI = MCC + MNC + MSIN,其中MCC是指移动台国家代码(3 位,中国460),MNC是指移动网代码(2 位中国00),MSIN是指移动用户识别号码(10 位 )

IMSI共有15位,其结构如下:

  MCC+MNC+MSIN ,(MNC+MSIN=NMSI)

  MCC:Mobile Country Code,移动国家码,MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460;

  MNC:Mobile Network Code,移动网络码,共2位,中国移动TD系统使用00,中国联通GSM系统使用01,中国移动GSM系统使用02,中国电信CDMA系统使用03,一个典型的IMSI号码为460030912121001;

  MSIN:Mobile Subscriber Identification Number共有10位,其结构如下:

  09+M0M1M2M3+ABCD

  其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。

  可以看出IMSI在MSIN号码前加了MCC即NMSI,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个移动网络运营商,可以通过MNC来进行区别.

更多相关文章

  1. Android移动应用基础学习——第二章UI开发
  2. 美国Android占28%份额 摩托Droid最受欢迎
  3. 《Android移动应用基础教程》(Android(安卓)Studio)(第二版)黑马教程
  4. Android
  5. 布局技巧和列表控件
  6. 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程
  7. 【Android】移动GIS开发必备(文档、帮助、工具)
  8. Android(安卓)已发行多年,移动 App 已经趋近饱和,那么 Android(安
  9. Android(安卓)已发行多年,移动 App 已经趋近饱和,那么 Android(安

随机推荐

  1. React 16.3新API
  2. 第2年
  3. 我们到底该如何学习数据结构与算法
  4. 为你Springboot项目自定义一个通用的异常
  5. 看源码,我为什么推荐IDEA?
  6. Linux Kernel and Android(安卓)休眠与唤
  7. JDBC 性能小贴
  8. 996我没觉得有啥毛病啊
  9. Spring AOP就是这么简单啦
  10. 你的接口,真的能承受高并发吗?