Clave Única de Registro de Población
Mexico · Individuals
Paste or type the number — punctuation is optional.
Other identifiers
Europe
Asia and the Middle East
Oceania
What this check does — and what it cannot do
This tool checks the number's structure and its check digit, using the published algorithm for that document. A number that passes is well formed: it is arithmetically consistent and could have been issued.
It cannot tell you whether the number was actually issued, whether it is active, or who it belongs to. Only the issuing tax authority can confirm that, through its own lookup service. Treat a passing result as "worth submitting", never as proof of identity.
The CURP check digit misses more than a fifth of single-character typos
Mexico's CURP ends in a check digit computed modulo 10 over an alphabet of 37 characters. That mismatch is fatal to its error detection: testing all 612 possible single-character substitutions on a valid CURP, 139 of them — 22.7% — produce a string that still passes. A mod-10 digit simply cannot distinguish 37 symbols.
How it works
- Validates the 18-character structure and recomputes the final check digit.
- Reports which structural rule failed rather than only that something did.
- States what the check digit can and cannot catch, which is less than most people assume.
alphabet: 0-9 then A-N, Ñ, O-Z (37 symbols, index 0-36) sum = Σ index(charᵢ) × (18 − i) for i = 0 … 16 check digit = (10 − (sum mod 10)) mod 10 the weights run 18 down to 2; the digit is the 18th character
Worked example
Computing the check digit for three CURP bodies, then testing what the digit detects.
- BADD110313HCMLNS0 → check digit 6
- SABC560626MDFLRN0 → check digit 1
- MAAJ800101HDFRRN0 → check digit 9
- 612 single-character substitutions tested → 139 undetected (22.7%)
- 14 adjacent transpositions tested → 1 undetected
Roughly one mistyped character in five sails through, and about 10% of random strings pass by chance. The check digit rules out the grossest corruption and little else — it is a formatting sanity check rather than a defence against transcription error.
Reading the result
- The weakness is structural, not a flaw in the implementation. Detecting every single-character error requires a modulus at least as large as the alphabet, which is why mod-11 schemes exist and why Chile's RUT tolerates a letter K rather than shrinking to mod 10.
- Compare the Canadian SIN, where Luhn catches all 81 possible single-digit substitutions. Same job, same class of identifier, and a completely different guarantee — the choice of modulus is what separates them.
- The first 16 characters are derived from name, birth date, sex and state, so a CURP is not opaque. It encodes personal information directly, which matters for how it is stored, logged and displayed.
- A structurally valid CURP is not necessarily an issued one. Only RENAPO can confirm registration, and no offline calculation establishes that a person with that CURP exists.
Common questions
- Will this catch a typo in my CURP?
- Often not. Of 612 possible single-character changes tested on a valid CURP, 139 still passed the check digit. If accuracy matters, require the value twice and compare, because the checksum alone lets roughly a fifth of typing errors through.
- Does a valid check digit mean the CURP is real?
- No. It means the 18 characters are internally consistent, which about 10% of random strings also manage. Confirming that a CURP was actually issued requires RENAPO; nothing computed offline can establish it.