最新消息:

国际移动用户识别码:IMSI

IMSI admin 1698浏览 0评论

国际移动用户识别码,即IMSI(International Mobile Subscriber Identity),它是在公众陆地移动电话网(PLMN)中用于唯一识别移动用户的一个号码。在GSM网络,这个号码通常被存放在SIM卡中。

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位。

以下为国内MCC+MNC的相关数据:

imsi

Android获取IMSI的方案:


         /**

          * 中国移动

          */

         publicstaticfinalintSIM_TYPE_CHINA_MOBILE=1;

         /**

          * 中国联通

          */

         publicstaticfinalintSIM_TYPE_CHINA_UNICOM=2;

         /**

          * 中国电信

          */

         publicstaticfinalintSIM_TYPE_CHINA_TELECOM=3;


         /** SIM卡是中国移动 */

         publicstaticbooleanisChinaMobile(){

                   Stringimsi=getSimOperator();

                   if(imsi==null)returnfalse;

                   returnimsi.startsWith("46000")||imsi.startsWith("46002")||imsi.startsWith("46007");

         }

         /** SIM卡是中国联通 */

         publicstaticbooleanisChinaUnicom(){

                   Stringimsi=getSimOperator();

                   if(imsi==null)returnfalse;

                   returnimsi.startsWith("46001");

         }

         /** SIM卡是中国电信 */

         publicstaticbooleanisChinaTelecom(){

                   Stringimsi=getSimOperator();

                   if(imsi==null)returnfalse;

                   returnimsi.startsWith("46003");

         }

         privatestaticStringgetSimOperator(){

                   TelephonyManager tm=(TelephonyManager)BoyaaApp.getApplication().getSystemService(Context.TELEPHONY_SERVICE);

                   returntm.getSubscriberId();

         }

         /** 获取手机电话号码 */

         publicstaticStringgetPhoneNumbers(){

                   TelephonyManager tm=(TelephonyManager)BoyaaApp.getApplication().getSystemService(Context.TELEPHONY_SERVICE);

                   returntm.getLine1Number();

         }

         //sim卡是否可读

         publicstaticbooleanisCanUseSim(){

             try{

                 TelephonyManager mgr=(TelephonyManager)BoyaaApp.getApplication().getSystemService(Context.TELEPHONY_SERVICE);

                 returnTelephonyManager.SIM_STATE_READY==mgr

                         .getSimState();

             }catch(Exceptione){

                 e.printStackTrace();

             }

             returnfalse;

         }

}

IOS获取IMSI方案:(会存在审核不通过的风险,7.0以后貌似无法获取,未测试)

使用coreTelephony.framework获取imsi

#define PRIVATE_PATH  "/System/Library/PrivateFrameworks/CoreTelephony.framework/CoreTelephony"

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
-(void)viewDidLoad{
   [superviewDidLoad];
#if !TARGET_IPHONE_SIMULATOR
   void*kit=dlopen(PRIVATE_PATH,RTLD_LAZY);
   NSString *imsi=nil;
   int(*CTSIMSupportCopyMobileSubscriberIdentity)()=dlsym(kit,"CTSIMSupportCopyMobileSubscriberIdentity");
   imsi=(NSString*)CTSIMSupportCopyMobileSubscriberIdentity(nil);
   dlclose(kit);

   UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"IMSI"
                                       message:imsi
                                      delegate:self
                               cancelButtonTitle:@"OK"
                               otherButtonTitles:nil];
   [alert show];
   [alert release];
#endif
}

参考资料:

转载请注明:爱开源 » 国际移动用户识别码:IMSI

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址