每一台手机都有自己的唯一识别编号,在做手机web开发时,可以通过这个编号做安全或权限的检查。(当然,这是在要求账户与终端绑定的情况下)
1.能够取得唯一编号的机器种类有
docomo:503、FORM之后的机器种类。
au:全部机器种类。
softbank:パケット通信対応之后的机器种类。
2.唯一编号的取得方法
(1)docomo
1)个体识别编号
user-agent里,“ser”后面的就是唯一ID,MOVA的是11位,FORM的是15位,“icc“后面的是FORM card的制造编号。
PHP示例代码
//$useragent 是user agent,$id就是唯一识别id
preg_match("/^.+ser([0-9a-zA-Z]+).*$/", $useragent, $match);
$id = $match[1];
2)imode id(guid)
从2008年4月开始,可以取得一个叫imode id的唯一识别id。imode id 是包含英文数字的大小区分的7位字符串,在ssl通信(https)时,不能取得imode id。
服务器要取得imode id,访问连接或提交表单里必须有名字是”guid“值是”ON“的参数,如:
<a href="http://example.com/test.php?guid=ON">test</a>
和
<form action="./example.cgi?guid=ON" method="post" name="form1">
<input type="submit" value="提交">
</form>
注意,表单提交里也只能通过get的方式传递guid参数,而不能通过hidden之类的表单项
从http头信息里通过"X-DCMGUID"取得imode id,示例代码如下:
//PHP
$id = $_SERVER['HTTP_X_DCMGUID'];
//Perl
$id = $ENV{'HTTP_X_DCMGUID'};
//Java
String id = request.getHeader("x-dcmguid");
3)另外还有一种方法是在URL里加上参数uid=NULLGWDOCOMO,如:
http://test/a?uid=NULLGWDOCOMO
那样的话,这个参数会自动转变成个体上识别编号, 服务端只要去这个参数的值就OK了。如java:
request.getParameter("uid")
注意:这种方法只有在Docomo申请过的得到认可的域名才有效,而且这种方法取得的个体识别编号和前面的方法取得的编号可能是不一样的。
所以一个应用里要用个体识别编号的话,要注意使用统一的方法获取。
(2)au
au的个体识别编号叫做EZ编号,可以通过键X-UP-SUBNO从HTTP头信息的里取得,取得的是12345678901234_56.ezweb.ne.jp形式的29位ID。示例代码:
//PHP
$id = $_SERVER['HTTP_X_UP_SUBNO'];
//Perl
$id = $ENV{'HTTP_X_UP_SUBNO'};
//Java
String id = request.getHeader("x-up-subno");
(3)softbank
1)个体识别编号
user-agent里”SN“后面的文字就是唯一编号,P型机种是11位的,之后的机种是15位的。PHP的示例代码:
preg_match("/^.+\/SN([0-9a-zA-Z]+).*$/", $useragent, $match);
$id = $match[1];
2)X_JPHONE_UID
16位的唯一ID,通过键X-JPHONE-UID从http头信息里取得。旧机型取不到。示例代码:
//PHP
$id = $_SERVER['HTTP_X_JPHONE_UID'];
//Perl
$id = $ENV{'HTTP_X_JPHONE_UID'};
//Java
String id = request.getHeader("x-jphone-uid");
转自 http://memorva.jp/memo/mobile/uid_utn.php