IMEI Validator
Paste a number. Get the checksum verdict and the parts it breaks into.
| Reporting Body Identifier | |
|---|---|
| Type Allocation Code | |
| Serial number | |
| Check digit |
What the check actually proves
A passing result means one thing: the fifteenth digit is the correct Luhn check digit for the first fourteen. That is a typo detector, not an identity check. It catches every single-digit error and almost every transposition of adjacent digits, which is what it was designed for in an era of numbers read aloud over the phone.
It tells you nothing about whether a device with that IMEI exists, who made it, or whether it is stolen. Those questions are answered by the GSMA's TAC database and by carrier Equipment Identity Registers, neither of which is reachable from a web page.
Why a number you know is real might fail
- A digit was mistyped or transposed. By far the most common cause, and precisely what the checksum exists to catch.
- You have 16 digits, not 15. That is an IMEISV: the check digit is replaced by a two-digit software version number, so there is no checksum to verify.
- You have 14 digits. Some systems store or display the IMEI without its check digit. The number is not wrong, just incomplete.
- It is an MEID or ESN. CDMA devices use a 14-digit hexadecimal MEID or an 8-digit hex ESN. Different scheme, different rules.
- An OCR or barcode scan dropped a digit. Worth re-reading the label by eye before assuming the device is suspect.
Dashes, spaces, and slashes are stripped before checking, so you can paste a number in any format you find it in.
Validating in bulk, in your own code
If you are checking more than a handful, do it where your data lives rather than pasting them one at a time. The whole algorithm is a dozen lines:
def valid_imei(imei: str) -> bool:
digits = [int(c) for c in imei if c.isdigit()]
if len(digits) != 15:
return False
total = 0
for i, d in enumerate(reversed(digits)):
if i % 2 == 1: # every second digit from the right
d *= 2
if d > 9:
d -= 9
total += d
return total % 10 == 0
The format guide has the same routine in JavaScript, along with the version that computes a check digit rather than verifying one.
Common questions
- Is my IMEI uploaded anywhere?
- No. The check runs in your browser and the number never leaves your device. There is no server-side component to receive it. Details are in the privacy policy.
- Can I check whether a phone is stolen or blacklisted?
- Not here. Blocklist status lives in the GSMA CEIR and in carrier registries; checking it requires an authorised lookup service, and in most countries your carrier or national regulator provides one free.
- Can I look up the manufacturer and model?
- Not from this page. The first eight digits — the TAC — do encode the model, but resolving them requires the GSMA's allocation database, which is licensed rather than public.
- Do numbers from the generator pass this check?
- Yes, by construction. The generator computes a correct check digit for every number it produces.