The Mexico CURP Validator checks any 18-character CURP against the full official validation criteria published by RENAPO (Registro Nacional de Población). It is not a simple regex check — the tool runs the real check-digit algorithm, decodes every embedded data field, and explains each pass or fail in plain English. Nothing is sent to a server; all computation happens in your browser.
What is a CURP?
The CURP (Clave Única de Registro de Población) is the 18-character national identity code issued by the Mexican government to every citizen and legal resident. It appears on birth certificates, passports, tax forms, IMSS and ISSSTE health cards, university enrolment and nearly every government-issued document. Understanding how to read and verify one is essential for HR professionals, compliance teams, notaries, developers integrating with Mexican government APIs, and anyone double-checking their own documents.
CURP format — position by position
A CURP looks like this: PELJ850101HDFLNS09
| Positions | Example | Meaning |
|---|---|---|
| 1-4 | PELJ | Name letters (surname vowel + surname letter + given-name letter) |
| 5-10 | 850101 | Date of birth YYMMDD (1 Jan 1985) |
| 11 | H | Sex: H = Hombre (male), M = Mujer (female) |
| 12-13 | DF | State of registration (DF = Ciudad de México) |
| 14-16 | LNS | First internal consonants of name components |
| 17 | 0 | Alphanumeric uniquifier assigned by RENAPO |
| 18 | 9 | Numeric check digit (the value this tool verifies) |
How the check-digit algorithm works
The RENAPO specification assigns each character a numeric value:
- Digits
0-9→ face value (0 through 9) - Letters
A-Z→ 10 through 35 (A=10, B=11, C=12 … Z=35) - Special character
Ñ→ 36
Each of the first 17 characters is multiplied by its 1-based position number.
All 17 products are summed. The remainder of dividing the sum by 10 is
calculated. If that remainder is zero the check digit is 0; otherwise the
check digit is 10 minus the remainder.
Example walkthrough for position 18 of PELJ850101HDFLNS09:
Pos 1 × P(25) = 25
Pos 2 × E(14) = 28
Pos 3 × L(21) = 63
Pos 4 × J(19) = 76
Pos 5 × 8(8) = 40
Pos 6 × 5(5) = 30
... (continue for all 17)
Sum = 291 → 291 mod 10 = 1 → check digit = 10 − 1 = 9 ✓
The tool shows this full table for any CURP you enter so you can verify the working independently.
Decoded information
Beyond the checksum, the validator extracts:
- Birth date — converted from YYMMDD to a full calendar date, with century inferred from the year digits relative to today.
- Sex — H (male) or M (female) from position 11.
- State of registration — the two-letter RENAPO code at positions 12-13
is looked up against all 32 Mexican states plus the foreign-born code
NE(Nacido/a en el extranjero). - Uniquifier — position 17, an alphanumeric character that RENAPO assigns to distinguish people who would otherwise share the same first 16 characters.
Fake example (for testing)
The CURP XEXX010101HNEXXXA8 is the official RENAPO test value used in
government documentation. It is deliberately constructed so it will never
match a real person. Enter it above to see a full passing result with the
complete checksum walkthrough.
Five things this validator checks
- Length — exactly 18 characters.
- Format — matches the official RENAPO regex pattern.
- Date of birth — a real calendar date (not day 00 or month 13).
- State code — one of the 32 official RENAPO codes (or
NE). - Check digit — the RENAPO weighted-sum algorithm applied to positions 1-17.
A CURP that passes all five checks is structurally valid. Whether it is registered in the live RENAPO database is a separate question that requires an official government lookup at gob.mx/curp.