CURP generator (Mexico)
A Mexican CURP is an 18-character code derived from name, date of birth, sex, and state of birth, ending in a check digit. These test values carry a valid check digit but are synthetic.
Synthetic CURP (valid check digit). The code is derived from personal data, so use only for testing.
Format specification
| Identifier | Clave Única de Registro de Población (CURP) |
|---|---|
| Country | 🇲🇽 Mexico |
| Format | AAAA000000AAAAAAX0 |
| Length | 18 characters |
| Checksum | CURP check digit |
| Example | SHYC370809HNLKZM62 |
| Safe strategy | Synthetic |
| Data quality | Verified against sources |
Clave Única de Registro de Población: what each part means
| AAAA | First letter and first internal vowel of the first surname, initial of the second surname, initial of the given name. Test values use random letters. |
|---|---|
| 000000 | Date of birth as YYMMDD. |
| A | Sex: H (hombre) or M (mujer). |
| AA | Two-letter code of the state of birth (NE for people born abroad). |
| AAA | First internal consonants of the two surnames and the given name. Test values use random consonants. |
| X | Disambiguator assigned by RENAPO: a digit for people born before 2000, a letter (A onward) from 2000. |
| 0 | Check digit: the first 17 characters valued by the official dictionary, weighted 18 down to 2, mod 10. |
Validation regex
Matches the canonical value — strip separators and uppercase first: value.replace(/[^A-Za-z0-9]/g, '').toUpperCase()
^[A-Z]{4}\d{6}[HM][A-Z]{5}[0-9A-Z]\d$ References
Common questions
Will these pass my validation?
Yes — they are well-formed Clave Única de Registro de Población values (AAAA000000AAAAAAX0) and pass standard format checks, including the CURP check digit checksum.
Could one belong to a real person?
These are synthetic values. They are format-valid but not drawn from a guaranteed reserved range, so use them only for testing.
Can I generate many at once?
Increase the count, or use the free API and CSV/JSON export for large datasets.