日期:2014-05-20 浏览次数:20770 次
最近,公司新上了一个项目,这个项目在安全性方面要求的比较高,所以在程序中要用到手机的IMEI和SIM卡的IMSI来对用户的身份进行验证。
? 先解释一下IMSI和IMEI的区别:
?
IMEI(International Mobile Equipment Identity)是国际移动设备身份码的缩写,国际移动装备辨识码,是由15位数字组成的"电子串号",它与每台手机一一对应,而且该码是全世界唯一的。每一只手机在组装完成后都将被赋予一个全球唯一的一组号码,这个号码从生产到交付使用都将被制造生产的厂商所记录。
IMSI:国际移动用户识别码(IMSI) international mobile subscriber identity,国际上为唯一识别一个移动用户所分配的号码。
IMSI共有15位,其结构如下:
MCC+MNC+MSIN
MCC:Mobile Country Code,移动国家码,共3位,中国为460;
MNC:Mobile Network Code,移动网络码,共2位,中国电信CDMA系统使用03,一个典型的IMSI号码为460030912121001;
MSIN:Mobile Subscribler Identification Number共有10位,其结构如下:
09+M0M1M2M3+ABCD
其中的M0M1M2M3和MDN号码中的H0H1H2H3可存在对应关系,ABCD四位为自由分配。
可以看出IMSI在MIN号码前加了MCC,可以区别出每个用户的来自的国家,因此可以实现国际漫游。在同一个国家内,如果有多个CDMA运营商,可以通过MNC来进行区别.
虽然看到上面的介绍,大家都已经知道IMEI和IMSI对于手机和手机SIM卡都是唯一的,并且依靠这两个参数来对用户的信息进行验证是完全可行的,但问题就是出现在这些美丽的外表之下的。
由于J2ME开发的应用程序要完全依赖于手机内置的KVM(J2ME虚拟机),又因为每个手机制造商的虚拟机提供给J2ME程序的可用接口不尽相同,所以,J2ME程序能否正确的获取手机的IMSI和IMEI,完全依赖于手机制造商底层的实现。
下面举几个获取手机IMEI和IMSI的例子;
LG? String imei = System.getProperty("com.lg.imei");
????????? String imsi=System.getProperty("com.lg.imsi");
SAMSUNG
????? String imei = System.getProperty("system.imei");
????????? String imsi=System.getProperty("system.imsi");
NOKIA
????? String imei = System.getProperty("com.nokia.mid.imei");
????????? String imsi=System.getProperty("com.nokia.mid.imsi");
上面NOKIA获取IMSI的方法我用红色注释了一下,因为,NOKIA对J2ME程序权限的不是很开放,所以,尽管有这个方法,但是,你还是无法获取NOKIA手机平台上的IMSI号码,
我们来看看NOKIA官方是如何说的
The IMSI (International Mobile Subscriber Identity) stored in the SIM card. For more information on IMSI, see IMSI in Wikipedia. Note that the access to this system property is limited with com.nokia.mid.mobinfo.IMSI permission. By default, this permission is available only in manufacturer and operator domain.
这回可以知道,无论说是S60,还是S40平台只有NOKIA和运营商才有权限获取这两个字符串,
由于市场上NOKIA的手机占有率非常的高,尤其是S40的平台开发的中低端机型为最多,所以放弃这些机型是不现实的,所以大家如果要做一个安全的验证的时候,获取手机的IMSI和IMEI只是一个备选方案,大家还应该研究另一套可行性较高的方案。
好了,最后在把J2ME平台获取手机本机电话号码的方法和大家说一下,因为在网上看到有些网友把获取手机号码的方法都贴了来。大家不要相信这些方法的可行性,因为在J2ME上获取手机的PHONENUMBER是不能的事情。在不发短信和不拨打电话的情况下,只有用户通过CMWAP上网的时候,移动的WAP网关才有可能获取手机的电话,至于你怎么获得,那开始要看运营商的脸色,呵呵,好了就说这么多了,如果说的哪里不对,还请大家指点。
?
注:下面的这个地址是我在CSDN上的博客,欢迎大家有空去坐坐。
?
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/AlexZheng_Blog/archive/2010/02/03/5283667.aspx