为什么80%的码农都做不了架构师?>>>
IMEI(国际移动设备识别码)
国际移动设备识别码(International Mobile Equipment Identity,IMEI),即通常所说的手机序列号、手机“串号”,用于在移动电话网络中识别每一部独立的手机等行动通讯装置,相当于移动电话的身份证。序列号共有15位数字,前6位(TAC)是型号核准号码,代表手机类型。接着2位(FAC)是最后装配号,代表产地。后6位(SNR)是串号,代表生产顺序号。最后1位(SP)一般为0,是检验码,备用。国际移动设备识别码一般贴于机身背面与外包装上,同时也存在于手机内存中,通过输入*#06#即可查询。
这是维基百科的说法,可以理解为每个一个正常的手机硬件出厂的时候,都有这么一串编码,用来标识别通信硬件。
IMEI获得方法
可以通过拨号盘查询:
*#*#4636*#*#
*#06#
这两种方式均可以查询IMEI,手机硬件唯一标识。
IMSI(国际移动用户识别码)
国际移动用户识别码(英语:IMSI,International Mobile Subscriber Identity),是用于区分蜂窝网络中不同用户的、在所有蜂窝网络中不重复的识别码。手机将IMSI存储于一个64比特的字段发送给网络。IMSI可以用来在归属位置寄存器(HLR,Home Location Register)或拜访位置寄存器(VLR,Visitor Location Register)中查询用户的信息。为了避免被监听者识别并追踪特定的用户,大部分情形下手机和网络之间的通信会使用随机产生的临时移动用户识别码(TMSI,Temporary Mobile Subscriber Identity)代替IMSI。 只要一个移动网络的用户需要与其他移动网络互通,就必须使用IMSI。在GSM、UMTS和LTE网络中,IMSI来自SIM卡,在CDMA2000网络中则是直接来自手机,或者RUIM。 IMSI由一串十进制数字组成,最大长度为15位[1] 。实际使用的IMSI的长度绝大部分都是15位,短于15位的例子少见,例如,南非MTN有一些仍在网络中使用的较旧的IMSI为14位数字。IMSI由移动国家代码(MCC,Mobile Country Code)、移动网络代码(MNC,Mobile Network Code)和移动订户识别代码(MSIN,Mobile subscription identification number)依次连接而成。MCC长度为3位,MNC长度由MCC的值决定,可以是2位(欧洲标准)或3位数字(北美标准)[2] ,MSIN的值由运营商自行分配。 IMSI的格式由国际电信联盟(ITU)的E.212标准定义。
这是维基百科的说法,简单理解就是运营商的网络,为了识别用户用的ID。不过这个数据的来源就有很多方式和标准,所以这个必须依靠写代码来获得IMSI。
IMSI获得方法
参考: IMSI的那些事儿 具体有一下两种方式,都是android手机环境下的:
// 方式一
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相关信息02TelephonyManager tm = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);// String str = ""; str += "DeviceId(IMEI) = " + tm.getDeviceId() + "\n"; str += "DeviceSoftwareVersion = " + tm.getDeviceSoftwareVersion() + "\n"; str += "Line1Number = " + tm.getLine1Number() + "\n"; str += "NetworkCountryIso = " + tm.getNetworkCountryIso() + "\n"; str += "NetworkOperator = " + tm.getNetworkOperator() + "\n"; str += "NetworkOperatorName = " + tm.getNetworkOperatorName() + "\n"; str += "NetworkType = " + tm.getNetworkType() + "\n"; str += "PhoneType = " + tm.getPhoneType() + "\n"; str += "SimCountryIso = " + tm.getSimCountryIso() + "\n"; str += "SimOperator = " + tm.getSimOperator() + "\n"; str += "SimOperatorName = " + tm.getSimOperatorName() + "\n"; str += "SimSerialNumber = " + tm.getSimSerialNumber() + "\n"; str += "SimState = " + tm.getSimState() + "\n"; str += "SubscriberId(IMSI) = " + tm.getSubscriberId() + "\n"; str += "VoiceMailNumber = " + tm.getVoiceMailNumber() + "\n"; mTv.setText(str);*/