Android手机唯一识别IMSI
2015-03-03 10:16
253 查看
现在Android应用APP越来越多,服务器对APP使用的用户权限管理的越来越严格,如使用Request_Token令牌来控
制服务器的API,然后服务器管理用户的复杂度也高了。以前在开发APP的时候使用的是手机的IMEI作为唯一表示机器
码,但是当刷机、系统还原出厂设置 这2种情况下,手机的IMEI都会改变,所以有时候回出现以前绑定的IMEI在服务
数据库对应的用户移动设备,当用户刷机、还原出厂设置 此时用户手机上的IMEI就改变了,当用户登录时,提交的
IMEI与服务器数据库的IMEI就不一样了,然而得出来得结论:只有当用户不刷机、不还原出厂设置的情况下,手机的
IMEI才是不变的。后面找到一个相对唯一的手机信息码----IMSI。
1、IMSI的中文解析定义:
国际移动用户识别码(IMSI) International Mobile Subscriber Identity
国际上为唯一识别一个移动用户所分配的号码。
2、技术运用上解析:
从技术上讲,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+MIN
MCC:Mobile Country Code,移动国家码,共3位,中国为460;
MNC:Mobile Network Code,移动网络码,共2位,联通CDMA系统使用03,一个典型的IMSI号码为460030912121001;
MIN共有10位,其结构如下:
09+M0M1M2M3+ABCD
其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。
可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同
一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别.
3、开发常用手机信息:
/***
* 获取手机的信息
*/
public void fetch_status(){
TelephonyManager 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";
TextView sys = (TextView) findViewById(R.id.sys);
sys.setText(str);
}
制服务器的API,然后服务器管理用户的复杂度也高了。以前在开发APP的时候使用的是手机的IMEI作为唯一表示机器
码,但是当刷机、系统还原出厂设置 这2种情况下,手机的IMEI都会改变,所以有时候回出现以前绑定的IMEI在服务
数据库对应的用户移动设备,当用户刷机、还原出厂设置 此时用户手机上的IMEI就改变了,当用户登录时,提交的
IMEI与服务器数据库的IMEI就不一样了,然而得出来得结论:只有当用户不刷机、不还原出厂设置的情况下,手机的
IMEI才是不变的。后面找到一个相对唯一的手机信息码----IMSI。
1、IMSI的中文解析定义:
国际移动用户识别码(IMSI) International Mobile Subscriber Identity
国际上为唯一识别一个移动用户所分配的号码。
2、技术运用上解析:
从技术上讲,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+MIN
MCC:Mobile Country Code,移动国家码,共3位,中国为460;
MNC:Mobile Network Code,移动网络码,共2位,联通CDMA系统使用03,一个典型的IMSI号码为460030912121001;
MIN共有10位,其结构如下:
09+M0M1M2M3+ABCD
其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。
可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同
一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别.
3、开发常用手机信息:
/***
* 获取手机的信息
*/
public void fetch_status(){
TelephonyManager 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";
TextView sys = (TextView) findViewById(R.id.sys);
sys.setText(str);
}
相关文章推荐
- android设备唯一码的获取之一手机串号IMEI和网络识别号imsi等
- Android手机获取手机唯一识别号
- android手机获取手机唯一识别号
- Android手机获取手机唯一识别号(转)
- Android中获取手机IMEI,IMSI, MAC(Android 6.0、支持4G环境获取)工具类(标识用户唯一)
- Android中获取手机IMEI,IMSI, MAC(Android 6.0)工具类(标识用户唯一)
- android获取手机唯一识别号
- eclipse不识别Android手机
- Android 手机上获取物理唯一标识码
- android 获取手机设备的唯一码(IMIE ) 注册用
- 识别你的手机 Android的属性系统
- 51-android.rules -- 一个文件搞定Ubuntu上Eclipse不识别Android手机的问题
- android--获取手机的IMSI码,并判断是中国移动\中国联通\中国电信
- ubuntu下android开发如何识别真实手机
- Android 手机应用开发经验之手势识别Gesture的研究
- 让Linux识别android手机
- Android 应用程序获取手机的 IMSI 码
- Ubuntu下Android手机无法识别进入调试问题解决方法
- [Android 调试] 解决linux系统不识别设备、手机问题方法