International · Mexico
CURP validator and RFC check.
Paste a CURP (18 characters) or an RFC (12 or 13). The tool tells which it is and checks layout, date and check character. Nothing is sent.
How it works: A CURP has 18 characters: 4 letters from the name, a YYMMDD birth date, a sex letter (H or M; X is accepted with a note), a 2-letter state code, 3 consonants, a homoclave character (a digit for births up to 1999, a letter from 2000) and a check digit. An RFC is 12 characters for a legal entity or 13 for an individual.
Inputs
Test values (not real people’s numbers):
Result
Enter a number and press Check.
How the Mexico CURP / RFC check works
A CURP has 18 characters: 4 letters from the name, a YYMMDD birth date, a sex letter (H or M; X is accepted with a note), a 2-letter state code, 3 consonants, a homoclave character (a digit for births up to 1999, a letter from 2000) and a check digit. An RFC is 12 characters for a legal entity or 13 for an individual.
| Positions | Meaning |
|---|---|
| 1-4 | Letters derived from the surnames and given name |
| 5-10 | Birth date YYMMDD |
| 11 | Sex letter: H or M in the 2018 instructivo (this tool also accepts X, with a note) |
| 12-13 | State of birth code, or NE for born abroad |
| 14-16 | Internal consonants of the names |
| 17 | Homoclave: 0-9 for births through 1999, a letter from 2000 |
| 18 | Check digit: weight characters 0-9, A-Z (with N-tilde after N) by 18 down to 2, then (10 minus sum mod 10) mod 10 |
| Part | Meaning |
|---|---|
| 3 or 4 letters | 3 for a persona moral (company), 4 for a persona fisica (individual) |
| 6 digits | Date of birth or of incorporation, YYMMDD |
| 3 characters | Homoclave; the last is a check character (0-9 or A) from a mod 11 sum with weights 13 down to 2 |
Worked example, the CURP BOXW310820HNERXN09: the first 17 characters weighted 18 down to 2 sum to 2551 under the dictionary 0-9, A-Z. 2551 mod 10 = 1, and (10 - 1) mod 10 = 9, which matches the last character. The date 31 / 08 / 20 with a digit in position 17 reads 20 August 1931. For the RFC GODE561231GR8 the first 12 characters weighted 13 down to 2 sum to 1026. 1026 mod 11 = 3, and 11 - 3 = 8, which matches the final 8.
What this tool cannot tell you
RENAPO (through gob.mx/curp) is the authority for CURP and the SAT for RFC. This tool can only say a string is well formed. It cannot say a CURP or RFC was assigned. A passing result means the number is well formed. It does not mean it was issued, is current, or belongs to anyone. Official sources to use instead: Consulta tu CURP (gob.mx) and SAT, Consulta RFC.
Where each rule comes from
Not every issuer publishes its check rules. This table says, for each rule used here, who documents it and how firmly.
| Rule | Source | Status |
|---|---|---|
| CURP positions 1-18: letters, date, sex H/M, state code, consonants, homoclave 0-9 up to 1999 and A-J from 2000 | Instructivo Normativo para la asignacion de la CURP, Diario Oficial de la Federacion, 18 June 2018 (Secretaria de Gobernacion) | Published by the issuer |
| CURP check digit algorithm | The DOF text says the digit comes from an algorithm assigned by Gobernacion without printing it. The weights 18 to 2 over a 0-9, A-Z dictionary are as implemented in python-stdnum mx/curp and Wikipedia. | Not published; reverse-engineered |
| State codes (32 states plus NE) | The instructivo refers to the catalogue in the Manual de Procedimientos; the list is as reproduced by python-stdnum mx/curp | Documented by third parties, cross-checked |
| RFC 12/13 layout and mod 11 check character | python-stdnum mx/rfc, which cites the SAT. It notes that roughly 1.5% of numbers in use fail the check, so a mismatch is only a warning. | Not published; reverse-engineered |
Frequently asked questions
How do I validate a CURP?
Paste the 18 characters. The tool checks the layout, that the date is real for the century implied by character 17, that the state code exists and that the last digit matches the check calculation.
Why can a valid-looking RFC fail the check?
The SAT does not publish its check calculation and roughly 1.5% of RFCs in real use do not satisfy the commonly implemented one, so a mismatch is flagged as a warning rather than a verdict.
Does a passing CURP prove it belongs to someone?
No. A passing result means the string is internally consistent. Only RENAPO can confirm assignment, through the official consult at gob.mx/curp.
Is it safe to type a CURP here?
The check runs in your browser and nothing is sent, stored or logged. Only enter numbers you are entitled to use.
Sources
- DOF, Instructivo Normativo para la asignacion de la CURP (18 June 2018) (retrieved 15 October 2026)
- python-stdnum, stdnum/mx/curp.py (retrieved 15 October 2026)
- python-stdnum, stdnum/mx/rfc.py (retrieved 15 October 2026)
- Wikipedia, CURP (retrieved 15 October 2026)
Format check only — not an official verification
This tool checks structure and, where a public algorithm exists, a check digit, entirely in your browser. It does not query any government register, and it cannot confirm that a number was issued or to whom. Nothing you type is transmitted, stored or logged.