携帯端末毎の識別(製造番号)

個体識別情報(DoCoMo Mova)

携帯端末の製造番号です。Movaの場合SIMカードが無く1つの契約で複数の端末が利用できないので、契約者毎にユニークになると考えて良いと思います。ただし、機種変更で変わります。

取得方法

AタグやFORMタグに "utn" 属性を付加することで、User-Agentに埋め込まれます。端末ではutn属性のあるリンククリックやフォーム送信時に毎回確認画面が表示されます。

<a href="..." utn>...</a>

<form action="..." utn>
...
</form>

User-Agent

ユーザーが「携帯電話製造番号通知」確認画面でYESを選択すると、User-Agentに "ser***********" 形式で製造番号が付加されます。

DoCoMo/1.0/P503i/c10/ser*********** 

FOMA端末製造番号(DoCoMo FOMA)

携帯端末の製造番号です。同一ユーザーでも端末買い増しをしているユーザーがUIMカードを別端末に入れ替えることで異なる値になります。Movaと同様に毎回確認画面が表示されます。

取得方法

Movaと同じです。XHTMLの場合は以下のようにします。

<a href="..." utn="utn">...</a>

User-Agent

User-Agentに "serXXXXXXXXXXXXXXX" 形式で製造番号が付加されます。同時にFOMAカード製造番号も付加されます。

DoCoMo/2.0 P902i(c100;TB;W24H12;serXXXXXXXXXXXXXXX;iccxxxxxxxxxxxxxxxxxxxx)

FOMAカード製造番号(DoCoMo FOMA)

UIMカード(FOMAカード)単位の製造番号です。買い増しで別端末を利用しても、同一UIMカードを使用すれば同じ番号になります。

取得方法

FOMA端末製造番号(DoCoMo FOMA)と同じです。

User-Agent

User-Agentの "iccxxxxxxxxxxxxxxxxxxxx" の箇所がFOMAカード製造番号になります。

製造番号/端末シリアル番号(SoftBank)

携帯端末の製造番号です。機種変更で変わります。

取得方法

ユーザーがブラウザの設定で「製造番号通知」をONにしていると自動でUser-Agentに埋め込まれます。最近の機種ではデフォルトがOFFになっているようなので注意が必要です。

User-Agent

User-Agentに "SN***************" 形式で製造番号が付加されます。

SoftBank/1.0/811SH/SHJ002/SN*************** Browser/NetFront/3.3 Profile/MIDP-2.0

User-Agent(フルブラウザ)

SoftBankでは製造番号通知がONになっていれば、フルブラウザ(PCサイトブラウザ)使用時にもUser-Agentに製造番号が埋め込まれます。

Mozilla/4.08 (811SH;SoftBank;SN***************) NetFront/3.3

ユーザー(契約)毎の識別(ユーザーID)

NULLGWDOCOMO(DoCoMo)

公式サイトでのみ利用可能です。リクエストパラメータの値に「NULLGWDOCOMO」を指定しておくと、DoCoMoのゲートウェイでユーザーIDに置き換えられます。

iモードID(DoCoMo)

URLパラメータ "guid=on" を付加することで、HTTPヘッダ X-DCMGUID にiモードIDが設定されます。2008/3/31から開始されました。詳細

取得方法

ユーザーが「iモードID通知設定」をONに設定している場合にURLパラメータ"guid=on"を付加されたページにアクセスするとHTTPヘッダに設定されます。

GETの場合は以下のようになります。

<a href="xxx?guid=on">...</a>

<form action="xxx" method="get">
<input type="hidden" name="guid" value="on">
...
</form>

POSTの場合は以下のようになります。

<form action="xxx?guid=on" method="post">
...
</form>

HTTPヘッダ

X-DCMGUID: xxxxxxx

こちらに「GET、POSTのリクエストラインに記述する場合対象、POSTのBODY部については対象外」と記述されているように、POST時にform内のhidden等を使って "guid=on" を指定しても、iモードIDは通知されないので注意が必要です。以下のようにはできません。

<!-- これはダメ -->
<form action="xxx" method="post">
<input type="hidden" name="guid" value="on">
...
</form>

EZ番号/サブスクライバID(au)

EZweb契約単位のユニークなIDです。機種変更や買い増しでは変化しませんが、一度EZwebを解約して再契約すると異なる値になります。

取得方法

ユーザーが「EZ番号通知設定」を「通知する」に設定していると、HTTPヘッダ(x-up-subno)に設定されます。デフォルトでは「EZ番号通知設定」は「通知する」になっています。HTTPヘッダは以下のような形式です。

x-up-subno: nnnnnnnnnnnnnn_xx.ezweb.ne.jp

nnnnnnnnnnnnnnの値から契約地域(関東、関西といったレベル)が特定できるようになっています。

ユーザーID(SoftBank)

「S!ベーシックパック」の解約、再契約では変化しないようです。USIMカードの無い機種から3Gへの機種変更などでは同一契約でも値が変化するようです。

取得方法

ユーザーが「ユーザーID通知設定」を「通知する」に設定していると、HTTPヘッダ(x-jphone-uid)に設定されます。契約した端末の初回起動時に「ユーザーID通知設定」について問い合わせされ、その選択が初期設定値となります。HTTPヘッダは以下のような形式です。

x-jphone-uid: xxxxxxxxxxxxxxxx

ユーザーID(EMOBILE)

ユーザーID通知が「通知する」になっていると、HTTPヘッダ(x-em-uid)に設定されます。初期状態は「通知する」です。HTTPヘッダは以下のような形式です。

x-em-uid: u99999999999999999

その他

2in1の場合(DoCoMo FOMA)

2in1 契約の場合のユーザーIDですが、Bナンバーからはパケット通信ができないそうなので、2つにはならないようです。(未確認)

携帯スマートフォン/フルブラウザ

スマートフォンのブラウザにはUser-Agentを変更することができるものがありますので、製造番号などの偽装に注意する必要がありますが、アクセス元のIPアドレス帯が異なるので判断可能です。

携帯識別情報の利用

User-Agentの変更やHTTPヘッダの付加などは簡単にできてしまいますので、携帯識別情報(製造番号、ユーザーID)を使用する際は、必ずIPアドレスを確認する必要があります。

リモートホストを使った判定は楽ですが、危険です。使う場合は正引きしなおす必要があります。

// この方法はダメ
if (request.getRemoteHost().matches("proxy[0-9]+\\.docomo\\.ne\\.jp")) {
    // ドコモの処理
}

実際、運営中サイトのログを確認していると、キャリアのドメインを騙った逆引き設定をしている不正なアクセスがまれに確認できます。