個体識別情報・UIDの取得方法

Docomo ドコモ utn

[HTTP_USER_AGENT] => DoCoMo/2.0 N999i(c100;TB;W24H16;ser【11または15桁の数字】;icc【19桁の数字】F)

Docomoの公式サイト(iメニューサイト)ではない、非公式サイト(勝手サイト)ではリンクやフォームに『 utn 』と付けることで、 USER AGENTに個体識別情報が付与されます。

<a href="sample.html" utn>テキスト</a>

<form method="post" utn>
………
</form>
serの後の数字個体識別情報(端末ID)です。
movaは11桁、FOMAは15桁
iccの後の数字FOMAカード製造番号

この番号は携帯電話で *#06# と打つと表示されます。
接続時に必ず次のようなメッセージが出ます。

携帯電話/FOMAカード(UIM)の製造番号を送信します。(はい/いいえ/戻る)

この番号は携帯電話で *#06# と打つと表示されます。

PHPでページ内のAタグ、FORMタグに『 utn 』を付ける方法

外部リンクなどがあるので、絶対パスには付きません。ページ内リンクにも不要なので付きません。mailto、tel、fax、newsも付けません。

『utn』をSmartyで付ける

<?php
/* ================================
 * relativeOabsolutePathUtn
 *
 * @create  2009-01-12
 * @author  pentan
 * @url     http://pentan.info/
 *
 * Copyright (c) 2009 pentan.info All Rights Reserved.
 * 著作権表示部分の変更削除は禁止です
 * ================================
 */

function relativeOabsolutePathUtn($str,$tag){
  $str=stripslashes($str);

  if(strtolower($tag)=="a"){
    if(preg_match("/href=¥"(https?|ftp):¥/¥//i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"#/i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"(mailto|tel|fax|news):/i",$str)){
      return $str.">";
    }elseif(preg_match("/href=/i",$str)){
      return $str." utn".">";
    }else{
      return $str.">";
    }
  }else{
    if(preg_match("/action=¥"(https?|ftp):¥/¥//i",$str)){
      return $str.">";
    }elseif(preg_match("/action=¥"#/i",$str)){
      return $str.">";
    }elseif(preg_match("/action=¥"(mailto|tel|fax|news):/i",$str)){
      return $str.">";
    }elseif(preg_match("/action=/i",$str)){
      return $str." utn".">";
    }else{
      return $str.">";
    }
  }
}

$body=preg_replace("/<(a|form) ([^>]+)>/ie",
      "'<$1 '.relativeOabsolutePathUtn('$2','$1')",$body);
?>

このようにしておくと、非公式サイトから公式サイトへの切り替えが楽になります。

Docomo ドコモ iモードID(guid)

2008年3月31日からiモードIDと呼ばれるIDを取得できるようになりました。
iモードIDは、英数字の7桁で大文字・小文字の区別あり。
SSL通信時(https)では、iモードIDを取得できない。

『iモードID』の提供開始について
iモードIDについて

以下のように引数に guid=on を入れます。

<a href="http://example.com/test.php?guid=on">テキスト</a>

<form action="./sample?guid=on" method="post">
<input type="submit" value="送信">
</form>

FORMの場合、POSTでは下記のようなHIDDENでは取得ができない。

<input type="hidden" name="guid" value="on">

POSTの場合はGETクエリに guid=on を付け、GETの場合にはHIDDENで

<input type="hidden" name="guid" value="on">

を指定します。


HTTPヘッダ(拡張ヘッダ)X-DCMGUID から取得します。

PHPの場合

$_SERVER['HTTP_X_DCMGUID']

Perlの場合

$ENV{'HTTP_X_DCMGUID'}

Javaの場合

request.getHeader("x-dcmguid")

PHPでページ内のAタグ、FORMタグに『 guid=on 』を付ける方法

外部リンクなどがあるので、絶対パスには付きません。ページ内リンクにも不要なので付きません。mailto、tel、fax、newsも付けません。

『guid=on』をSmartyで付ける

<?php
/* ================================
 * relativeOabsolutePathGuid
 *
 * @create  2009-01-12
 * @author  pentan
 * @url     http://pentan.info/
 *
 * Copyright (c) 2009 pentan.info All Rights Reserved.
 * 著作権表示部分の変更削除は禁止です
 * ================================
 */

function relativeOabsolutePathGuid($str,$tag){
  $str=stripslashes($str);

  if(strtolower($tag)=="a"){
    if(preg_match("/href=¥"(https?|ftp):¥/¥//i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"#/i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"(mailto|tel|fax|news):/i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"([^¥"]+)¥"/i",$str,$match)){
      if(preg_match("/¥?$/i",$match[1]) || preg_match("/&$/i",$match[1])){
        return preg_replace("/href=¥"([^¥"]+)¥"/i",
                "href=¥"$1guid=on¥"".">",$str);
      }elseif(preg_match("/¥?/i",$match[1])){
        return preg_replace("/href=¥"([^¥"]+)¥"/i",
                "href=¥"$1&guid=on¥"".">",$str);
      }else{
        return preg_replace("/href=¥"([^¥"]+)¥"/i",
                "href=¥"$1?guid=on¥"".">",$str);
      }
    }else{
      return $str.">";
    }
  }else{
    if(preg_match("/action=¥"(https?|ftp):¥/¥//i",$str)){
      return $str.">";
    }elseif(preg_match("/action=¥"#/i",$str)){
      return $str.">";
    }elseif(preg_match("/action=¥"(mailto|tel|fax|news):/i",$str)){
      return $str.">";
    }elseif(preg_match("/action=¥"([^¥"]+)¥"/i",$str,$match)){
      if(preg_match("/¥?$/i",$match[1]) || preg_match("/&$/i",$match[1])){
        return preg_replace("/action=¥"([^¥"]+)¥"/i",
                "action=¥"$1guid=on¥"".">",$str);
      }elseif(preg_match("/¥?/i",$match[1])){
        return preg_replace("/action=¥"([^¥"]+)¥"/i",
                "action=¥"$1&guid=on¥"".">",$str);
      }else{
        return preg_replace("/action=¥"([^¥"]+)¥"/i",
                "action=¥"$1?guid=on¥"".">",$str);
      }
    }else{
      return $str.">";
    }
  }
}

$body=preg_replace("/<(a|form) ([^>]+)>/ie",
      "'<$1 '.relativeOabsolutePathGuid('$2','$1')",$body);
?>

このようにしておくと、非公式サイトから公式サイトへの切り替えが楽になります。

Docomo ドコモ 公式コンテンツ(iメニューサイト)

NULLGWDOCOMOで取得できます。

<a href="test.php?uid=NULLGWDOCOMO"></a>

<form method="post">
<input type="hidden" name="uid" value="NULLGWDOCOMO" />
………
</form>

上記のようにすることで、ユーザーIDが取得できます。
これはTSUTAYAメールなどで見ることができる。

PHPでページ内のAタグ、FORMタグに『 uid=NULLGWDOCOMO 』を付ける方法

外部リンクなどがあるので、絶対パスには付きません。ページ内リンクにも不要なので付きません。mailto、tel、fax、newsも付けません。

『NULLGWDOCOMO』をSmartyで付ける

<?php
/* ================================
 * relativeOabsolutePathNULLGW
 *
 * @create  2009-01-12
 * @author  pentan
 * @url     http://pentan.info/
 *
 * Copyright (c) 2009 pentan.info All Rights Reserved.
 * 著作権表示部分の変更削除は禁止です
 * ================================
 */

function relativeOabsolutePathNULLGW($str,$tag){
  $str=stripslashes($str);

  if(strtolower($tag)=="a"){
    if(preg_match("/href=¥"(https?|ftp):¥/¥//i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"#/i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"(mailto|tel|fax|news):/i",$str)){
      return $str.">";
    }elseif(preg_match("/href=¥"([^¥"]+)¥"/i",$str,$match)){
      if(preg_match("/¥?$/i",$match[1]) || preg_match("/&$/i",$match[1])){
        return preg_replace("/href=¥"([^¥"]+)¥"/i",
          "href=¥"$1uid=NULLGWDOCOMO¥"".">",$str);
      }elseif(preg_match("/¥?/i",$match[1])){
        return preg_replace("/href=¥"([^¥"]+)¥"/i",
          "href=¥"$1&uid=NULLGWDOCOMO¥"".">",$str);
      }else{
        return preg_replace("/href=¥"([^¥"]+)¥"/i",
          "href=¥"$1?uid=NULLGWDOCOMO¥"".">",$str);
      }
    }else{
      return $str.">";
    }
  }else{
    if(preg_match("/action=¥"(https?|ftp):¥/¥//i",$str)){
      return $str.">";
    }elseif(preg_match("/action=¥"#/i",$str)){
      return $str.">";
    }elseif(preg_match("/action=¥"(mailto|tel|fax|news):/i",$str)){
      return $str.">";
    }elseif(preg_match("/action=/i",$str)){
      return $str."><input type=¥"hidden¥" name=¥"uid¥" value=¥"NULLGWDOCOMO¥" />";
    }else{
      return $str.">";
    }
  }
}

$body=preg_replace("/<(a|form) ([^>]+)>/ie",
      "'<$1 '.relativeOabsolutePathNULLGW('$2','$1')",$body);
?>

このようにしておくと、公式サイトから非公式サイトへの切り替えが楽になります。

au ezWeb

EZ番号(サブスクライバID)と呼ばれる番号が利用できます。
HTTPヘッダ(拡張ヘッダ) X-UP-SUBNO から取得します。

PHPの場合

$_SERVER['HTTP_X_UP_SUBNO']

Perlの場合

$ENV{'HTTP_X_UP_SUBNO'}

Javaの場合

request.getHeader("x-up-subno")

【数字14桁】_【英文字2文字】.ezweb.ne.jp という形式のIDが得られます。
例:12345678901234_ab.ezweb.ne.jp

公式サイトと非公式サイトの両方で利用されています。
この番号は携帯電話のメニューのEZ番号(サブスクライバID)という項目に書いてあります。

サブスクライバIDと地域

EZ番号の先頭4桁から契約した地域がわかるといわれています。

先頭4桁地域
0500au関東/中部
0700au関西
0701au九州
0702au中国
0703au東北
0704au北陸
0705au北海道
0706au四国
0707au沖縄
0800TU-KA東京
0801TU-KA関西
0802TU-KA東海

Softbank(ソフトバンク)/Disney

[HTTP_USER_AGENT] => SoftBank/1.0/000SH/SHJ001/SN【11または15桁の数字】

USER AGENTの中にあるSNの後の数字が個体識別情報です。
P型は11桁、それ以降は15桁。
非公式サイトで利用されています。
この番号は携帯電話で *#06# と打つと表示されます。

これは携帯端末から出力される情報です。
IPアドレスでの制限と併用してもこの番号は技術的に偽装ができます。(自由な値を送ることが可能です)
このため、この番号を認証に使用してはいけません。

[HTTP_X_JPHONE_UID] => 【大文字小文字の英数字16文字】

Softbankには、X_JPHONE_UIDというものもあります。
HTTPヘッダ(拡張ヘッダ)X-JPHONE-UID から取得します。
X-JPHONE-UIDは、昔は公式サイトでしか取得できませんでしたが、現在は非公式サイトでも取得できます。
ただし、古い機種では取得できません。

ネットワーク側で送信される情報のため、ソフトバンクの携帯用IPアドレスを使用している限りでは偽装はできないようです。

PHPの場合

$_SERVER['HTTP_X_JPHONE_UID']

Perlの場合

$ENV{'HTTP_X_JPHONE_UID'}

Javaの場合

request.getHeader("x-jphone-uid")

iPhoneの通常の設定では、どちらも取得できません。

X_JPHONE_UIDと地域

UIDの先頭1桁から契約した地域がわかるといわれています。

エリアP型/W型/3GC型C型
関東・甲信a1
東海b2
関西c3
中国d4
四国e5
九州・沖縄f6
東北・新潟g7
北海道h8
北陸i9

この地域分類は、家族割でかつ同時期に新規契約した場合は主契約の契約地となることがあるようです。
つまり主契約の契約者が関東だったとすると、子契約が関西でも a から始まり、関東のUIDとなってしまうみたいです。
実例あり

Emobile(イーモバイル)

[HTTP_X_EM_REGION] => 【5桁の数字】
[HTTP_X_EM_UID] => u【17桁の数字】

X_EM_UIDで、個体識別情報が利用できます。
HTTPヘッダ(拡張ヘッダ)X_EM_UID から取得します。

PHPの場合

$_SERVER['HTTP_X_EM_UID']

Perlの場合

$ENV{'HTTP_X_EM_UID'}

Javaの場合

request.getHeader("x-em-uid")

MySQLなどの注意点

個体識別情報やユーザーIDは、大文字小文字の英文字が混在する場合があります。
MySQLを利用しているときは、このカラムをutf8_general_ciなどにしていると、正しく判別できません。
(utf8_general_ciやutf8_unicode_ciは大文字小文字を区別しません。)
例:aaaaaで探しても、AAAAAがヒットすることがあります。
このカラムは個人情報にも関わるので、utf8_binなどにしておいたほうがいいです。

PHPなどでセッションは使う必要がありません。

個体識別情報が使えるなら、GETクエリなどでセッションIDを引き回す必要はありません。
PHPならsession_start()の前に、session_id($uid)などとすることで、セッションIDをURLなどで送らなくても、内部的にセッションは使えます。 実際にはセッションID名は『 aからz、AからZ、0から9および「-(ハイフン)」』という規則があるので、これに合わせてユーザーIDを整形する必要があります。

PHPのセッションについて

関連記事

スポンサーリンク

OracleとGoogleとのJavaについての訴訟

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る