转载+整理(尚未找到原文链接,我参考与http://blog.csdn.net/sunny2come/article/details/8290023)
首先手机号码不是所有的都能获取,只是有很少一部分可以拿到。
这个是取决于移动运营商有没有把手机号码的数据写入到sim卡中,若写入了自然能拿到手机号码,反之则无法获取.SIM卡只有唯一的编号,供网络与设备识别那就是IMSI号码,手机的信号也可以说是通过这个号码在网络中传递的,并不是手机号码。试想,你的SIM丢失后,补办一张新的会换号码吗?是不会的.就是因为在你的手机号码对应的IMSI号 在移动运营商中被修改成新SIM卡的IMSI号码。
那么手机号为什么有的就能显示呢?这个就像是一个变量,当移动运营商为它赋值了,它自然就会有值。不赋值自然为空。
对于移动的用户,手机号码(MDN)保存在运营商的服务器中,而不是保存在SIM卡里。SIM卡只保留了IMSI和一些验证信息。手机每次入网注册的时候,都会以短信的形式将IMSI及验证信息上传到运营商的服务器,服务器在完成注册动作之后,会以短信的形式将注册的结果下发到手机里。下发的内容会因条件不同而不同。
如果服务器在下发的短信中,不包含手机的号码,手机是无法取得电话号码。如果短信中包含了号码,手机才会将其缓存,以备他用.此外,对于其他运行商的SIM卡或者UIM卡,MDN有可能保存在UIM卡中。100%能够取得本机号码不太可能.移动神州行,联通的卡是可以取到的.动感地带的取不到.别的卡还没有试过.
能够读取SIM卡号的话应该有前提.那就是SIM卡已经写入了本机号码,不然是无法读取的
从技术层面而言,手机的SIM卡上并不会存储手机号码信息,只会存储IMSI(International Mobile Subscriber Identification Number)。手机号码(MSISDN)都是登记在HLR(Home Location Register)中的,在HLR中会把IMSI和MSISDN关联在一起。
中国移动的SIM卡里只有IMSI号码而没有存储手机号码,在中国移动的HLR中会有一张映射表,专门用于把用户手机SIM卡的IMSI号映射成为用户的手机号码,这就是移动丢卡不丢号的业务也就是缘于此,也是一卡多号的原理。而电信CDMA(原来联通CDMA)的机卡合一的手机卡里会同时存在IMSI和手机号码。
•客户端获取:在客户端对移动用户而言只能够获取诸如IMSI、IMEI号等,并不能直接获得手机号。而对电信CDMA机卡合一用户可以获取手机号码。
•服务器端获取:在早期的移动白名单中是能够获得明文的手机号的,最近移动策略变了,手机号变成了天书般的唯一串号。因此目前从服务器端直接获取手机号也不行了。
•通过短信方式:让用户上行一条短信,通过短信网关获取用户手机号,从而将用户id与手机号绑定。目前能够想到的能够相对可靠地自动获取用户手机号的方法只有通过短信方式。
这里再提另一个获取手机号的方式:转载于http://blog.vsharing.com/51bk/A908299.html
移动支持2种上网模式:cmwap与cmnet
CMWAP 和 CMNET 只是移动人为划分的两个GPRS接入方式。前者是为手机WAP上网而设立的,后者则主要是为PC、笔记本电脑、PDA等利用GPRS上网服务。 cmwap应用采用的实现方式是“终端+WAP网关+WAP服务器”的模式。主要的目的是通过WAP网关完成WAP-WEB的协议转换以达到节省网络流量和兼容现有WEB应用的目的。WAP网关从技术的角度讲,只是一个提供代理服务的主机,它不一定由网络运营商提供。目前只有唯一的一个WAP网关:10.0.0.172(但各省市可能有各自的二级代理),标准的WAP网关仅仅实现了HTTP代理的功能,并未完成路由、NAT等局域网网关的功能。这就决定了它在应用上所受到的限制。目前,移动的WAP网关对外只提供HTTP代理协议(80和8080端口)和WAP网关协议(9201端口)。
CMNET拥有完全的Internet访问权,与internet一样,没有带来网关。
有了这个概念之后,让我们继续:
如何通过程序获得用户手机号:
如果用户要访问目标wap网站,在浏览器中输入wap.jxc114.com网址,选择使用cmwap接入点上网,则默认会先到wap网关,由wap网关进行转接到目标wap网站。因为是经过了wap网关的过滤,在出来的信息中,网关向http header中注入了用户的手机号信息,同时分两种情况,一个是明文的手机号,一种是被加密的手机号码,为256为字符,对于明文的可以使用如下方法直接获得:request.ServerVariables("x-up-calling-line-id ")对于加密手机号:网关把他放到header的“deviceid”的属性中,如果要获得手机号,则需要移动misc系统的支持,通过密文找到对应的手机号。(现在已经无法使用了)
我们知道做无线互联网,最重要的两个信息一个就是UA、一个就是用户手机号;知道了UA就可以知道手机的机型,我就可以提供更有针对的显示界面,比如使用N95手机进行访问,页面直接显示为240×320进行显示,是Symbian OS v9.2操作系统S60平台,我们就可以提供相应的下载软件,这些都是UI交互中最必须的(移动做的差,还不让别人做的好,是么世道!);而获得用户的手机号,就可以知道订购关系,甚至可以进行小额移动支付业务。
那么网关又是如何获得UA和用户的手机号呢?
我们知道每个SIM卡背面的号码是SIM卡的电子串号,也叫IMSI号码,这个号码是全球唯一的,是国际电联分配给每个运营商的,电话号码和IMSI没有任何关系,当开通服务时电话号码和IMSI号码在交换机上做绑定,这样你的SIM卡就可以用了。(所以丢了sim卡,但是通过不卡,手机号是可以不变的)
那么用户在使用客户端也好,浏览器也好,访问wap网址的时候,根据3GPP的链路协议,会自动上传imsi号码,网关获得imsi再到misc系统中(misc再调用移动的基础网络数据)获得用以绑定的手机号,至于是否在从网关中吐出手机号,那就是移动说的算了。
至于UA,如果使用浏览器则浏览器会默认上传;如果是用客户端的方式,则需要受到填充UA信息,当然也可以不填。
是以至此,那么怎么获得手机号呢?
1、 大的sp都会和移动签约,申请获得网关转发的手机号;
2、 与业务进行绑定,要求用户填写手机号码(这也是没有办法的办法,所以为什么很多wap站都要求用户输入手机号的原因)
3、 和已经签约sp进行合作;
再补充一下,如果使用cmnet上网的时候,是没有办法获得用户手机号码的,因为他没有通过网关。