携帯端末番号(個体識別番号)判別

携帯の端末番号の取得方法を紹介します。こういった携帯にまつわる問題は各社仕様がバラバラで面倒です。とにかく簡単に済ませたいもんです。

方法

DoCoMoとSoftBankはユーザーエージェントに番号が含まれますので、これを解析すればすぐにわかります。AUはユーザーエージェントには含まれず$_SERVER['HTTP_X_UP_SUBNO'];に格納されています。この特殊な変数があれば、ほぼ端末番号であると分かる訳ですが、ログとして保存したい場合には個別に保存項目が必要になりやっかいです。そこで前の番号部分を抜いてユーザーエージェントに連結させます。これで大手三社の番号をユーザーエージェントだけで確認できます。

DoCoMo

// MOVA
DoCoMo/1.0/X503i/c10/ser12345678901
serの後に11桁英数字

// FOMA
DoCoMo/2.0 N2001(c10;ser12345678901;
icc12345678901234567890)
serの後に15桁英数字
iccの後に20桁英数字
改行が含まれます。
PHP:
  1. // ser以降で判別
  2. $agent = $_SERVER['HTTP_USER_AGENT'];
  3. $hasSubno = preg_match('/ser[0-9A-Za-z]{11,15}/', $agent);

SoftBank

// Vodafone
Vodafone/1.0/V802SH/SHJ002/SN123456789012345 Browser/UP.Browser/7.0.2.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1 Ext-J-Pr

// SoftBank
SoftBank/1.0/705P/PJP10/SN123456789012345 Browser/Teleca-Browser/3.1 Profile/
MIDP-2.0 Configuration/CLDC-1.1

いずれも/SNの後に15桁英数字
PHP:
  1. // /SN以降で判別
  2. $agent = $_SERVER['HTTP_USER_AGENT'];
  3. $hasSubno = preg_match('/\/SN[0-9A-Za-z]{15}/', $agent);

AU

AUの場合だけ先にユーザーエージェントに番号を付けます。

PHP:
  1. // 05051234567890_ae.ezweb.ne.jp
  2. // 4桁地域コードと10桁端末コード
  3. $subno = $_SERVER['HTTP_X_UP_SUBNO'];
  4. // KDDI-CA23 UP.Browser/5.1 (GUI) MMP/2.0/SUB05051234567890_ae
  5. $_SERVER['HTTP_USER_AGENT'] .= '/SUB'.substr($subno, 0, -12);

PHP:
  1. // 連結した末尾で判別
  2. $agent = $_SERVER['HTTP_USER_AGENT'];
  3. $hasSubno = preg_match('/\/SUB0\d0\d\d{10}_[a-z\d]{2}$/', $agent);

まとめ

これで端末番号を送信しているかどうかユーザーエージェントだけで判断できるし、特定の端末番号を拒否する事もできます。今回は省略しましたが、以前の携帯判別のコードと合わせれば便利に書けるかもしれません。
ユーザーエージェント携帯判別

注意

これらの環境変数($_SERVER)は信用してはいけません。保存したり、ページへ出力させる場合にはどんな文字が入っていても問題ない様にしましょう。

  • Search

Copyright (c) 2004-2008 MT312 All Rights Reserved.
Powered by WordPress ME