Mobile equipment identifier


A mobile equipment identifier is a globally unique number identifying a physical piece of CDMA2000 mobile station equipment. The number format is defined by the but in practical terms, it can be seen as an IMEI but with hexadecimal digits.
An MEID is 56 bits long. It consists of three fields, including an 8-bit regional code, a 24-bit manufacturer code, and a 24-bit manufacturer-assigned serial number. The check digit is not considered part of the MEID.
The MEID was created to replace ESNs, whose virgin form was exhausted in November 2008. As of TIA/EIA/IS-41 Revision D and TIA/EIA/IS-2000 Rev C, the ESN is still a required field in many messages—for compatibility, devices with an MEID can use a pseudo-ESN, which is a manufacturer code of 0x80 followed by the least significant 24 bits of the SHA-1 hash of the MEID. MEIDs are used on CDMA mobile phones. GSM phones do not have ESN or MIN, only an International Mobile Station Equipment Identity number.

Obtaining the MEID

Commonly, opening the phone's dialler and typing *#06# will display its MEID.

Administration

The separation between international mobile equipment identifiers used by GSM/UMTS and MEIDs is based on the number ranges. There are two administrators: the global decimal administrator for IMEIs and the global hexadecimal administrator.
As of August 2006, the TIA acts as the GHA to assign MEID code prefixes, and the GSM Association acts as the global decimal administrator. http://www.babt.com/gsm-imei-number-allocation.asp723889TIA also allocates IMEI codes, specifically destined for dual-technology phones, out of the RR=99 range. Other administrators working under GSMA may also allocate any IMEI for use in dual-technology phones. Every IMEI can also be used as an MEID in CDMA2000 devices but MEID codes may also contain hexadecimal digits and this class of MEID codes cannot be used as an IMEI.

Display formats

There are two standard formats for MEIDs, and both can include an optional check-digit. This is defined by .
The hexadecimal form is specified to be 14 digits grouped together and applies whether all digits are in the decimal range or whether some are in the range 'A'–'F'. In the first case, all digits are in the range '0'–'9', the check-digit is calculated using the normal base 10 Luhn algorithm, but if at least one digit is in the range 'A'–'F' this check digit algorithm uses base 16 arithmetic. The check-digit is never transmitted or stored. It is intended to detect most input errors, it is not intended to be a checksum or CRC to detect transmission errors. Consequently, it may be printed on phones or their packaging in case of manual entry of an MEID.
The decimal form is specified to be 18 digits grouped in a 5–5–4–4 pattern and is calculated by converting the manufacturer code portion to decimal and padding on the left with '0' digits to 10 digits and separately converting the serial number portion to decimal and padding on the left to 8 digits. A check-digit can be calculated from the 18 digit result using the standard base 10 Luhn algorithm and appended to the end. Note that to produce this form the MEID digits are treated as base 16 numbers even if all of them are in the range '0'–9'.

pESN conflicts

Because the pESN is formed by a hash on the MEID there is the potential for hash collisions. These will cause an extremely rare condition known as a 'collision' on a pure ESN-only network as the ESN is used for the calculation of the Public Long Code Mask used for communication with the base-station. Two mobiles using the same pESN within the same base-station area can result in call setup and page failures.
The probability of a collision has been carefully examined. Roughly, it is estimated that even on a heavily loaded network the frequency of this situation is closer to 1 out of 1 million calls than to 1 out of 100 000.
3GPP2 specification provides a solution to this problem by allowing the PLCM to be established by the base station. It is easy for the base station to ensure that all PLCM codes are unique when this is done. This specification also allows the PLCM to be based on the MEID or IMSI.
A different problem occurs when ESN codes are stored in a database. In this situation, the risk of at least two phones having the same pseudo-ESN can be calculated using the birthday paradox and works out to about a 50 per cent probability in a database with 4,800 pseudo-ESN entries. 3GPP2 specifications and have been modified to allow the replacement MEID identifier to be transmitted, resolving this problem.
Another problem is that messages delivered on the forward paging channel using the pESN as an address could be delivered to multiple mobiles seemingly randomly. This problem can be avoided by using mobile identification number or IMSI based addressing instead.

Code to convert

This short Python script will convert an MEID to a pESN.

import hashlib
meid = input.upper
bytes = bytearray.fromhex
s = hashlib.sha1
  1. Decode the hex MEID
pesn = "80" + s.hexdigest.upper
  1. Put the last 6 digits of the hash after 80
print

The CDG also provides a .
This C# method will convert an MEID from HEX to DEC format

public static string HexToDecimal