IMSI-MCC-MNC

来源:互联网 发布:伊藤英明知乎 编辑:程序博客网 时间:2024/04/29 14:24

国际移动用户识别码(IMSI) international mobile subscriber identity  国际上为唯一识别一个移动用户所分配的号码。  从技术上讲,IMSI可以彻底解决国际漫游问题。但是由于北美目前仍有大量的AMPS系统使用MIN号码,且北美的MDN和MIN采用相同的编号,系统已经无法更改,所以目前国际漫游暂时还是以MIN为主。其中以O和1打头的MIN资源称为IRM(International Roaming MIN),由IFAST (International Forum on ANSI-41 Standards Technology)统一管理。目前联通申请的IRM资源以09打头。可以看出,随着用户的增长,用于国际漫游的MIN资源将很快耗尽,全球统一采用IMSI标识用户势在必行.[编辑本段]结构组合  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来进行区别.  ================================  区别于IMEI:International Mobile Equipment Identity (国际移动设备标识)国际移动用户识别码与开源项目  OpenBTS是基于软件的 GSM 接入口,它提供标准的GSM兼容的移动手机,不需使用现成的电话提供商的接口,来拨打现有电话系统的接口。OpenBTS是以第一个基于开源软件的工业标准的GSM协议栈而闻名。OpenBTS 使用的是国际移动用户识别码(IMSI) international mobile subscriber identity 。OpenBTS 和 OpenBSC 提供了在一个较低的层次上了解更多关于 GSM 网络的技术的开源平台。 


在MTK中,可以通过这个SetProtocolEventHandler(RspToTestRoamingEnabled, PRT_GET_IMSI_RSP);去获取IMSI码,

在函数void RspToTestRoamingEnabled(void *inMsg)中的,local_data->imsi,MCC+MNC+MSIN ,你获取相应的位数就可以了,

U16 MCC[3];

memcpy(MCC, (local_data->imsi) , 3);

同理,IMEI的获取如下:

      void btl_send_msg_get_imei(void)
{
    MYQUEUE Message;
    kal_prompt_trace(MOD_MMI," btl_sim_send_get_imei");
    //ClearInputEventHandler(MMI_DEVICE_ALL);
    SetProtocolEventHandler(btl_sim_imei_rsp, MSG_ID_MMI_NW_GET_IMEI_RSP);
    Message.oslMsgId = MSG_ID_MMI_NW_GET_IMEI_REQ;
    Message.oslDataPtr = NULL;
    Message.oslPeerBuffPtr = NULL;
    Message.oslSrcId = MOD_MMI;
    Message.oslDestId = MOD_L4C;
    OslMsgSendExtQueue(&Message);//msg_send_ext_queue
    SetProtocolEventHandler(btl_sim_imei_rsp, MSG_ID_MMI_NW_GET_IMEI_RSP);
    kal_prompt_trace(MOD_MMI,"btl_send_msg_get_imei");
}

void btl_sim_imei_rsp(void *info)
{
    mmi_nw_get_imei_rsp_struct *imei= (mmi_nw_get_imei_rsp_struct*) info;
    strcat(imsi_imei_num, " ");
    strcat(imsi_imei_num,( char *) imei->imei);
    kal_prompt_trace(MOD_MMI,"btl_sim_imei_rsp");
}