Perl CGI で携帯の 3キャリア端末を判別する方法

Perl のCGIで 携帯電話 3キャリアの端末を判別する方法を解説します。
2006年10月から Vodafone が Softbank に変わったことにより、従来より分岐が増えました。

携帯 3キャリア判別 サンプルコード

sub get_carrier{
    my $ua = $ENV{HTTP_USER_AGENT};
    $ua or return '不明';
    $ua =~ /^DoCoMo/ and return 'i-mode';
    $ua =~ /^KDDI/ and return 'EZ Web';
    $ua =~ /^Vodafone/ and return 'Softbank(旧 Vodafone 3G)';
    $ua =~ /^J-PHONE/ and return 'Softbank(旧 Vodafone)';
    $ua =~ /^SoftBank/ and return 'Softbank';
    $ua =~ /^UP\.Browser/ and return 'EZ Web(旧世代)'; #HDML
    $ua =~ /Windows|Mozilla|MSIE|Macintosh|PowerPC| (実際には空白を空けずに1行で記載)
        Opera|Mac|Netscape|Safari|Lunascape|Sleipnir/ and return 'PC クライアント';
    return '不明';
}

my $carrier = &get_carrier;

print 'お使いの端末は '.$carrier.' と判別されました。';

判別の対象

ブラウザを判別する材料は環境変数 $ENV{HTTP_USER_AGENT} に格納されている値です。
この値は、http(https)通信を行う時にクライアントブラウザが通常送信してくるもので、「ユーザエージェント」情報と呼ばれます。

ブラウザが送ってくる値なのでこれは詐称する事も可能で、詐称された場合はCGIプログラム側ではそれを見抜く方法は有りません。

また、キャリアが提供するシミュレータには実際の端末の場合とは異なるユーザエージェント情報を送信するものもあり、この場合、シミュレータでは正常なキャリア判別の検証ができません。