美文网首页
spn与plmn,imsi与imei简单记录

spn与plmn,imsi与imei简单记录

作者: 梧叶已秋声 | 来源:发表于2020-01-13 11:54 被阅读0次

    首先先来看一台sim卡正常工作的设备的spn和plmn的值。
    使用adb shell getprop命令,出现的信息包含gsm.sim.operator.alpha和gsm.operator.alpha。

    [gsm.operator.alpha]: [CHINA MOBILE]
    [gsm.operator.iso-country]: [cn]
    [gsm.operator.isroaming]: [false,false]
    [gsm.operator.numeric]: [46000]
    [gsm.sim.operator.alpha]: [CMCC]
    [gsm.sim.operator.imsi]: [46002xxxxxxxxxx]
    [gsm.sim.operator.iso-country]: [cn]
    [gsm.sim.operator.numeric]: [46002]
    ..........
    [ril.gsm.imei]: [86843xxxxxxxxxx,86843xxxxxxxxxx]
    

    该信息表明设备的spn值就是CMCC,plmn是CHINA MOBILE。
    CMCC :China Mobile Communications Corporation。

    SPN :Service Provider Name 。服务提供商名称,就是当前发行SIM卡的运营商的名称。
    PLMN :Public Land Mobile Network。注册网络运营商名称。就是当前注册使用的网络名称。

    那么当前设备的信息为什么是这样的呢?
    可以通过打印radio log去查看。
    adb logcat -b radio -v time > radio.txt
    log中部分日志如下。

    01-13 10:36:48.696 D/SST     ( 2458): showSpn:false spn:null showPlmn:true plmn:CHINA MOBILE rule:2
    01-13 10:36:48.696 D/TelephonyManager( 2458): setTelephonyProperty: success phoneId=0 property=gsm.operator.alpha value: CHINA MOBILE propVal=CHINA MOBILE
    ..........
    01-13 10:36:52.952 D/SIMRecords( 2458): [SIMRecords] getServiceProviderName: no brandOverride, providerName=CMCC
    01-13 10:36:52.952 D/SIMRecords( 2458): [SIMRecords] Load EF_SPN: CMCC spnDisplayCondition: 0
    01-13 10:36:52.952 D/TelephonyManager( 2458): setTelephonyProperty: success phoneId=0 property=gsm.sim.operator.alpha value: CMCC propVal=CMCC
    
    //vendor\mediatek\proprietary\frameworks\opt\telephony\src\java\com\mediatek\internal\telephony\MtkServiceStateTracker.java
    protected void pollStateDone() {
    ..........
    tm.setNetworkOperatorNameForPhone(mPhone.getPhoneId(), mSS.getOperatorAlpha());
    ..........
    }
    
    //frameworks\opt\telephony\src\java\com\android\internal\telephony\uicc\SIMRecords.java
      private void getSpnFsm(boolean start, AsyncResult ar) {
    ..........
         if (DBG) log("Load EF_SPN: " + spn
                                    + " spnDisplayCondition: " + mSpnDisplayCondition);
                            mTelephonyManager.setSimOperatorNameForPhone(
                                    mParentApp.getPhoneId(), spn);
    ..........
    }
    

    最后通过调用TelephonyManager中的setNetworkOperatorNameForPhone和setSimOperatorNameForPhone,分别设置了gsm.operator.alpha和gsm.sim.operator.alpha。
    在没有漫游的情况下,CMCC 和 CHINA MOBILE的差异只是显示字符的差异,plmn和spn的显示运营商是同一个,即中国移动,这种情况下会比较难理解plmn和spn差异。但是在存在漫游的情况下,会更容易理解plmn和spn的区别。下面是一台使用墨西哥的TELCEL运营商的卡,并在西班牙漫游的设备的使用adb shell getprop命令后获取的部分信息。

    [gsm.operator.alpha]: [vodafone ES]
    [gsm.operator.iso-country]: [es]
    [gsm.operator.isroaming]: [true]
    [gsm.operator.numeric]: [21401]
    [gsm.ril.uicc.mccmnc]: [334020]
    [gsm.sim.operator.alpha]: [TELCEL]
    [gsm.sim.operator.iso-country]: [mx]
    [gsm.sim.operator.numeric]: [334020]
    

    该设备的plmn值为vodafone ES(英国移动运营商),spn为TELCEL(墨西哥移动运营商)。
    因为在漫游的情况下,有的时候sim卡的运营商在当地并没有提供网络支持,需要使用别家运营商的网络,就像上面的情况。
    spn简单来说就是sim卡的运营商名称,plmn就是当前注册使用的网络运营商名称。
    看完plmn与spn,现在来看imsi与imei。

    imsi : International Mobile Subscriber Identity,也就是sim卡的唯一标识号,类似于sim卡的身份证。
    imei : International Mobile Equipment Identity,是手机的唯一标识号,相当于手机的身份证。

    [gsm.operator.numeric]: [46000]
    [gsm.sim.operator.imsi]: [46002xxxxxxxxxx]
    [gsm.sim.operator.numeric]: [46002]
    ..........
    [ril.gsm.imei]: [86843xxxxxxxxxx,86843xxxxxxxxxx]
    

    当前sim卡的imsi值为46002xxxxxxxxxx,operator.numeric值为46002。
    imsi组成为MCC+MNC+MSIN。
    operator.numeric组成是MCC+MNC。这个一般是5位或6位。
    下面是一个5位的和6位的numeric对比。

    [gsm.sim.operator.numeric]: [46002]
    [gsm.sim.operator.numeric]: [334020]
    

    MCC:Mobile Country Code 。MCC的资源由国际电联(ITU)统一分配和管理,唯一识别移动用户所属的国家,共3位,中国为460。
    MNC:Mobile NetworkCode 。在中国,中国移动TD系统使用00,中国联通GSM系统使用01,中国移动GSM系统使用02,中国电信CDMA系统使用03

    参考链接:
    IMSI号和IMEI解释

    相关文章

      网友评论

          本文标题:spn与plmn,imsi与imei简单记录

          本文链接:https://www.haomeiwen.com/subject/supgactx.html