The IMEI (International Mobile Station Equipment Identity) is a 15-digit number to uniquely identify a mobile phone device. IMEISV (IMEI Software Version) is a 16-digit number with the IMEI and an additional software version number.

As of 2004, the formats of the IMEI and IMEISV are `AA-BBBBBB-CCCCCC-D`

and `AA-BBBBBB-CCCCCC-EE`

respectively. The definition of the formats can be found below.

AA | BB-BB-BB | CC-CC-CC | D | EE |
---|---|---|---|---|

TAC | TAC | SN | CD | SVN |

**TAC :**Type Allocation Code**SN :**Serial Number**CD :**Check Digit based on Luhn algorithm**SVN :**Software Version Number

If you notice the format, the 15th digit of the IMEI is a check digit and the IMEISV has a 2-digit software version number but without the check digit.

To retrieve information of a mobile device, we normally perform an IMEI lookup rather than an IMEISV lookup. To retrieve the IMEI from the IMEISV , we need to perform the following steps:

- Remove the last 2 digits (SVN) from IMEISV, leaving us with the IMEI but without the check digit
- Compute the check digit based on the Luhn algorithm

## Luhn Algorithm Check Digit Computation

- Starting from the right, double every other digit (e.g., 8 → 16).
- Sum the digits (e.g., 16 → 1 + 6).
- The sum plus the check digit must be divisable by 10 (e.g., sum is 52, check digit must be 8, since 60 is divisable by 10).

For IMEI `35576205279323?`

, the check digit computation is as follows.

IMEI | 3 | 5 | 5 | 7 | 6 | 2 | 0 | 5 | 2 | 7 | 9 | 3 | 2 | 3 | ? |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|

Double every other | 3 | 10 | 5 | 14 | 6 | 4 | 0 | 10 | 2 | 14 | 9 | 6 | 2 | 6 | ? |

Sum digits | 3 + | 1 + 0 | 5 + | 1 + 4 + | 6 + | 4 + | 0 + | 1 + 0 + | 2 + | 1 + 4 + | 9 + | 6 + | 2 + | 6 + | ? = 55 + ? |

For the sum to be divisible by 10, we need to set ? = 5, so the IMEI is `355762052793235`

.