Understanding CURP Number Structure
The CURP number is an 18-character alphanumeric identifier that encodes biographical data about Mexican citizens and residents. This technical reference provides government systems administrators and procurement teams with the knowledge necessary to implement CURP validation in identity processing workflows. Understanding the structure enables pre-screening before committing to paid API verification calls.
Character-by-Character Breakdown
Each position in the CURP number carries specific meaning derived algorithmically from the holder's legal name, date of birth, gender, and state of birth:
| Positions | Content | Example | Derivation Rule |
|---|---|---|---|
| 1 | Letter | G | First vowel of paternal surname (after initial) |
| 2 | Letter | A | First letter of paternal surname |
| 3 | Letter | R | First letter of maternal surname |
| 4 | Letter | C | First letter of given name |
| 5-10 | Digits | 850515 | Birth date (YYMMDD format) |
| 11 | Letter | H | Gender: H (Hombre/Male) or M (Mujer/Female) |
| 12-13 | Letters | DF | State of birth (2-letter code from 32 states + NE for foreign-born) |
| 14 | Letter | R | First internal consonant of paternal surname |
| 15 | Letter | N | First internal consonant of maternal surname |
| 16 | Letter | S | First internal consonant of given name |
| 17 | Alphanumeric | 0-9/A | Disambiguation (digit for pre-2000, letter for 2000+) |
| 18 | Digit | 5 | Verification check digit |
Valid State Codes
Position 12-13 must contain one of 33 valid codes representing Mexico's 32 states plus the foreign-born indicator:
- AS (Aguascalientes), BC (Baja California), BS (Baja California Sur), CC (Campeche)
- CL (Coahuila), CM (Colima), CS (Chiapas), CH (Chihuahua), DF (Ciudad de México)
- DG (Durango), GT (Guanajuato), GR (Guerrero), HG (Hidalgo), JC (Jalisco)
- MC (Estado de México), MN (Michoacán), MS (Morelos), NT (Nayarit), NL (Nuevo León)
- OC (Oaxaca), PL (Puebla), QT (Querétaro), QR (Quintana Roo), SP (San Luis Potosí)
- SL (Sinaloa), SR (Sonora), TC (Tabasco), TS (Tamaulipas), TL (Tlaxcala)
- VZ (Veracruz), YN (Yucatán), ZS (Zacatecas), NE (Nacido en el Extranjero)
Check Digit Algorithm
The 18th character is a verification digit calculated using the following algorithm:
- Assign numeric values: 0-9 retain their value; A=10, B=11, ... Z=36, Ñ=37
- Multiply each of the first 17 characters' numeric values by (18 - position), where position starts at 0
- Sum all products
- Calculate: check = 10 - (sum mod 10); if check equals 10, use 0
This algorithm enables instant format validation without network connectivity, providing a cost-effective first-pass filter.
API-Based Verification
Format validation confirms structural correctness but cannot verify:
- Whether the CURP is actually registered in RENAPO's database
- Whether the CURP has been revoked or superseded
- Whether the biographical data matches the actual holder
For authoritative verification, government systems must query the RENAPO database through authorized channels. Platforms such as apipull.com provide API access to RENAPO-sourced data with response times under 500ms and 99.9% availability guarantees, suitable for high-volume government processing environments.
Implementation Recommendations
The Technology Assessment Division recommends a two-tier validation approach:
- Tier 1 — Local format validation: Implement check digit calculation and state code verification in your application logic. Reject obviously malformed inputs before making API calls. This reduces verification costs by 15-30% based on typical error rates in manual data entry.
- Tier 2 — API verification: For format-valid CURPs, submit to an authorized verification service to confirm active registration status and retrieve associated biographical data for matching against presented documents.
Enterprise verification platforms like apipull.com support both batch processing (CSV upload with results delivery) and real-time single-query APIs, accommodating different agency workflow requirements.
Common Validation Errors
| Error Type | Frequency | Detection Method |
|---|---|---|
| Invalid state code | ~8% | Lookup table check |
| Wrong check digit | ~12% | Algorithm calculation |
| Invalid date (position 5-10) | ~5% | Date parsing |
| Invalid gender code | ~2% | H/M character check |
| Length != 18 | ~15% | String length check |
Implementing comprehensive local validation addresses approximately 42% of invalid submissions without incurring API costs.