ICCID decoder for SIM cards
Decode an ICCID — the serial number printed on a SIM or eSIM — into its MII, country code, issuer identifier, and account number per ITU-T E.118, and validate the trailing Luhn check digit.
How to use this tool
What it does
Decodes an ICCID — the SIM card serial number — into its country, issuer and check-digit fields.
When to use it
Use it to validate a SIM identifier or read which issuer a card belongs to.
Worked example
Paste an ICCID to verify its Luhn check digit and read the issuer identifier.
ICCID
Decoded fields
What an ICCID is
The Integrated Circuit Card Identifier (ICCID) is the globally unique serial number of a SIM card or an eSIM profile. It is laser-etched on the plastic of a physical SIM, encoded in the EF-ICCID elementary file on the card, and carried inside an eSIM profile package during remote provisioning. Unlike the IMSI — which identifies the subscriber — the ICCID identifies the card itself, and it stays constant even when the subscription or phone number changes.
Its structure follows ITU-T Recommendation E.118, the international numbering plan for telecommunication cards. Every compliant ICCID starts with the Major Industry Identifier 89, the prefix reserved for telecommunications, the same way payment cards start with other MII values under ISO/IEC 7812. After the MII comes a country code, an issuer identifier, an individual account number, and an optional trailing check digit computed with the Luhn (mod-10) formula.
When to use it
Reach for this decoder when you are debugging SIM or eSIM provisioning, validating a batch of ICCIDs before they are loaded into an HLR/HSS or an entitlement server, or sanity-checking a number a customer read out over the phone. Catching a bad Luhn digit or a wrong length before it enters a billing system saves a great deal of downstream cleanup. It is also handy when reverse-engineering a profile package, reconciling inventory across operators, or teaching the E.118 layout to a new team member.
Input and output
Paste any value between 18 and 20 digits. The tool first normalizes the input by stripping spaces, dashes, dots, and underscores, then rejects anything that still contains non-digits or falls outside the accepted length. It splits the digits into fields and reports each one:
MII
The first two digits. 89 marks a telecom card; the tool flags any other value because a non-89 prefix is not a standard ICCID.
Country code
An ITU-T E.164 dialing code of one to three digits. The tool greedily matches a small built-in map and shows unknown rather than guessing.
Issuer + account
The remaining digits before the check digit. The exact issuer/account boundary varies by operator, so the segment is shown intact for you to split.
Check digit
The final digit. The tool runs Luhn over the whole number and shows pass or fail plus the expected digit, so a single typo is easy to spot.
The plain-text summary in the result panel is what the Copy button places on your clipboard, so you can paste a one-line decode straight into a ticket or a script comment.
Common mistakes
- Assuming every ICCID is 20 digits. E.118 permits up to 19 digits plus an optional check digit; both 19- and 20-digit forms are valid in the wild. An 18- or 19-digit value may simply omit the Luhn digit.
- Reading a Luhn failure as a fake card. Not every operator prints a Luhn-protected ICCID. A failure usually means a transcription error, but it can also mean the operator never added a check digit — check both possibilities.
- Confusing the country code with the home country. The E.164 code reflects where the card was issued, not where the SIM currently roams, and it can be one to three digits with no internal delimiter.
- Mixing up ICCID, IMSI, and EID. The ICCID identifies the card, the IMSI identifies the subscriber, and the EID identifies the eUICC chip. They are different identifiers with different lengths and rules.
- Pasting an MSISDN. A phone number is not an ICCID. If the value does not start with
89, you are almost certainly looking at a different identifier.
Related tools
Luhn & length fields
The same mod-10 idea shows up in TLV length checks and other framed formats.
More utilities
Parsers, decoders, and references for smart-card, SIM, and FIDO engineers.
Frequently asked questions
What is an ICCID?
The Integrated Circuit Card Identifier (ICCID) is the unique serial number printed on a SIM or eSIM profile and stored in the EF-ICCID file. It is defined by ITU-T E.118 and begins with the Major Industry Identifier 89 for telecommunications, followed by a country code, an issuer identifier, an individual account number, and an optional trailing Luhn check digit.
How long is an ICCID — 19 or 20 digits?
ITU-T E.118 allows up to 19 digits plus an optional Luhn check digit, so you commonly see 19-digit and 20-digit ICCIDs in the field. This tool accepts 18 to 20 digits, treats the last digit as the candidate check digit, and reports whether the value is Luhn-consistent. Some operators print the number without the check digit.
How is the Luhn check digit validated?
The Luhn (mod-10) algorithm doubles every second digit from the right, subtracts 9 from any result over 9, sums all digits, and requires the total to be a multiple of 10. The tool runs Luhn across the full ICCID including the trailing digit and shows pass or fail, plus the expected check digit so you can spot a single mistyped digit.
Why does the country code not always decode?
The country code follows ITU-T E.164 dialing codes and can be one, two, or three digits, with no length marker inside the ICCID. This tool uses a small built-in map of common codes and matches greedily; if the leading digits are not in the map it labels the country as unknown rather than guess. The issuer and account split also varies by operator.
Does the ICCID I paste leave my browser?
No. All parsing and Luhn validation run locally in JavaScript on this page. Nothing is uploaded, logged, or sent to a server. The built-in sample is a non-real dummy value generated in the browser, not a genuine SIM number.