モバイル機器識別子(MEID)は、 CDMA2000移動局機器の物理的な個体を識別するための、世界的に一意な番号です。この番号の形式は3GPP2レポートS.R0048で定義されていますが、実際にはIMEIを16進数で表したものと考えることができます。
MEIDは56ビット(16進数で14桁)の長さです。8ビットの地域コード(RR)、24ビットの製造元コード、および24ビットの製造元割り当てシリアル番号の3つのフィールドで構成されています。チェックデジット(CD)はMEIDの一部とはみなされません。
MEIDは、2008年11月に未使用の電子シリアル番号(ESN)が枯渇したため、その代替として作成されました。 [ 1 ] TIA/EIA/IS-41リビジョンDおよびTIA/EIA/IS-2000リビジョンCの時点では、ESNは依然として多くのメッセージで必須のフィールドです。互換性のために、MEIDを持つデバイスは、MEIDのSHA-1ハッシュの最下位24ビットに続いて、メーカーコード0x80(以前は予約済み)が続く擬似ESN(pESN)を使用できます。[ 2 ] MEIDはCDMA携帯電話で使用されます。GSM電話にはESNやMINはなく、国際モバイルステーション機器識別番号(IMEI)のみです。
通常、電話のダイヤラーを開いて*#06#と入力すると、MEIDが表示されます。[ 3 ]
GSM/UMTSで使用される国際移動体通信機器識別子(IMEI)とMEIDの区別は、番号範囲に基づいています。IMEIには、グローバル10進数管理者(GDA)とグローバル16進数管理者(GHA)の2つの管理者が存在します。
2006 年 8 月現在、TIA は GHA として MEID コード接頭辞 (0xA0 以上) を割り当て、GSM アソシエーションはグローバル 10 進数管理者として機能します。TIA はまた、デュアル テクノロジー電話専用の IMEI コードを RR=99 の範囲から割り当てます。[ 4 ]この範囲は、一般的に (ただし排他的ではない) CDMA をサポートするLTE対応ハンドセットに使用されます。GSMAの下で活動する他の管理者も、デュアル テクノロジー電話で使用するために任意の IMEI を割り当てることができます。デュアル テクノロジー電話に IMEI を割り当てる場合、14 桁の 16 進数 MEID は IMEI の最初の 14 桁の 10 進数です。[ 5 ]例えば、AppleやLG は通常BABTによって割り当てられた RR=35 を使用しますが、Huaweiなどの中国ブランドは、 3GPPネットワーク用に TAF によって割り当てられた 2 つの RR=86 IMEIと、3GPP2 ネットワーク用の RR=99 10 進数または RR=A0 16 進数の MEID を使用します。すべての IMEI は、CDMA デバイス (および GSM やその他の 3GPP プロトコルで設計されたシングルモードデバイス) で MEID としても使用できますが、MEID には 16 進数の数字が含まれることもあり、この MEID バリアントは IMEI として使用できません。
MEIDには2つの標準フォーマットがあり、どちらもオプションでチェックデジットを含めることができます。これは3GPP2標準X.S0008で定義されています。
16進数形式は、14桁の数字をグループ化したもので、すべての桁が10進数の範囲内にある場合と、一部の桁が「A」~「F」の範囲内にある場合の両方に適用されます。最初のケース、つまりすべての桁が「0」~「9」の範囲内にある場合、チェックデジットは通常の10進数Luhnアルゴリズムを使用して計算されますが、少なくとも1桁が「A」~「F」の範囲内にある場合は、このチェックデジットアルゴリズムは16進数演算を使用します。チェックデジットは送信も保存もされません。これは、ほとんどの(ただしすべてではない)入力エラーを検出することを目的としており、送信エラーを検出するためのチェックサムやCRCとして使用することを目的としたものではありません。したがって、MEIDを手動で入力する場合(たとえば、バーコードがない場合やバーコードが読み取れない場合など)に備えて、電話機またはそのパッケージに印刷されることがあります。
10進数形式は、5-5-4-4のパターンでグループ化された18桁の数字として指定されており、製造元コード部分(32ビット)を10進数に変換し、左側に「0」をパディングして10桁にし、シリアル番号部分を別途10進数に変換し、左側にパディングして8桁にすることで算出されます。チェックデジットは、標準的な10進数Luhnアルゴリズムを使用して18桁の結果から計算され、末尾に追加されます。この形式を作成する際、MEIDの数字はすべて「0」~「9」の範囲内であっても、16進数として扱われることに注意してください。
pESNはMEIDのハッシュ値によって生成されるため、ハッシュ衝突が発生する可能性があります。ESNは基地局との通信に使用される公開ロングコードマスク(PLCM)の計算に使用されるため、純粋なESNのみのネットワークでは、この衝突は「衝突」と呼ばれる極めてまれな状態を引き起こします。同じ基地局エリア内で(同じ周波数で)同じpESNを使用する2台の携帯電話は、通話設定やページングの失敗につながる可能性があります。
衝突の確率は慎重に検討されてきた。[ 6 ]おおよそ、負荷の高いネットワークでも、この状況の発生頻度は10万回の通話に1回ではなく、100万回の通話に1回に近いと推定されている。
3GPP2仕様C.S0072は、基地局がPLCMを確立できるようにすることで、この問題に対する解決策を提供します。この方法を用いることで、基地局はすべてのPLCMコードが一意であることを容易に保証できます。また、この仕様では、PLCMをMEIDまたはIMSIに基づいて設定することも可能です。
ESNコードがデータベース( OTASPなど)に保存されている場合、別の問題が発生します。この場合、誕生日パラドックスを使用して、少なくとも2台の電話機が同じ擬似ESNを持つリスクを計算できます。4,800個の擬似ESNエントリを持つデータベースでは、その確率は約50%になります。3GPP2仕様C.S0016(リビジョンC以降)およびC.S0066は、代替MEID識別子を送信できるように変更され、この問題を解決しています。
もう一つの問題は、pESNをアドレスとして使用してフォワードページングチャネルで配信されるメッセージが、複数の携帯電話にランダムに配信される可能性があることです。この問題は、代わりに携帯電話識別番号(MIN)またはIMSIに基づくアドレス指定を使用することで回避できます。
この短いPythonスクリプトは、MEIDをpESNに変換します。
hashlibをインポートmeid = input ( "MEIDを入力してください: " ) . upper ()bytes = bytearray.fromhex ( meid ) s = hashlib.sha1 ( bytes ) # 16進数のMEIDをデコードします(バイナリに変換します!)pesn = "80" + s.hexdigest ( )[ - 6 :] . upper () # ハッシュの最後の6桁を80の後に挿入するprint ( "pESN:" , pesn )CDGは、より多くの変換オプションを備えたJavaScript計算機も提供しています。
このC#メソッドは、MEIDを16進数形式から10進数形式に変換します(無効なMEIDの16進数値の場合は空の値を返します)。
public static string HexToDecimal ( string input ) { if ( input . Length != 14 ) { return "" ; // 有効な 16 進 MEID ではありません。} string hexPart1 = input . Substring ( 0 , 8 ); string hexPart2 = input . Substring ( 8 , 6 ); try { string decPart1 = int . Parse ( hexPart1 , System . Globalization . NumberStyles . HexNumber ). ToString (). PadLeft ( 10 , '0' ); string decPart2 = int . Parse ( hexPart2 , System . Globalization . NumberStyles . HexNumber ). ToString (). PadLeft ( 8 , '0' ); return decPart1 + decPart2 ; } catch ( System . FormatException ex ) { return "" ; // 16 進解析に失敗しました。有効な 16 進 MEID ではありません。} }