Skip to content

🪪 CURP Status

The CURP validation report verifies Mexico’s national identification number (Clave Única de Registro de Población) and retrieves associated personal data from the official RENAPO database.

CURP validation is the foundation of identity verification in Mexico. This report validates the document ID format, confirms its existence in the national registry, and retrieves associated personal information for cross-verification with other reports.

Field Type Description Example
document_id string 18-character CURP code ABCD123456EFGHIJ78
city_locode string UN LOCODE of the city MX MEX
Field Type Description Default
full_name string Expected full name for verification null
date_of_birth string Expected date of birth (YYYY-MM-DD) null

The CURP follows a specific 18-character format:

ABCD123456EFGHIJ78
Position Characters Description Example
1-2 Letters First surname initial + vowel AB
3-4 Letters Second surname + first name initials CD
5-10 Numbers Birth date (YYMMDD) 123456
11 Letter Gender (H=Male, M=Female) E
12-13 Letters Birth state code FG
14-16 Letters Internal consonants HIJ
17 Number/Letter Homonym differentiator 7
18 Number Check digit 8

Registry: Registro Nacional de Población (RENAPO) Authority: Secretaría de Gobernación (SEGOB) Coverage: All Mexican citizens and legal residents Update Frequency: Real-time

{
"id": "beb8716f-34cc-4582-aafa-ef011b1cc6f5",
"reports": {
"curp": {
"state": "COMPLETED",
"created_at": "2021-03-30T03:18:31.242613",
"updated_at": "2021-03-30T03:18:41.915065",
"outcome": "PASSED",
"details": {
"curp": "ABCD123456EFGHIJ78",
"full_name": "JUAN MIGUEL DOE ROE",
"forenames": "JUAN MIGUEL",
"surname": "DOE",
"mothers_surname": "ROE",
"gender": "M",
"dob": "01-01-1900",
"state_born": "VERACRUZ",
"validation": {
"format_valid": true,
"check_digit_valid": true,
"registry_found": true
}
}
}
}
}
{
"id": "beb8716f-34cc-4582-aafa-ef011b1cc6f5",
"reports": {
"curp": {
"state": "COMPLETED",
"created_at": "2021-03-30T03:18:31.242613",
"updated_at": "2021-03-30T03:18:41.915065",
"outcome": "FAILED",
"details": {
"curp": "INVALID123456789012",
"validation": {
"format_valid": false,
"check_digit_valid": false,
"registry_found": false,
"errors": [
"Invalid CURP format",
"Check digit mismatch",
"Not found in RENAPO registry"
]
}
}
}
}
}
  1. Length Check: Must be exactly 18 characters
  2. Character Pattern: Letters and numbers in correct positions
  3. Date Validation: Birth date must be valid calendar date
  4. State Code: Must be valid Mexican state code
  5. Gender Code: Must be ‘H’ (Hombre) or ‘M’ (Mujer)

The 18th character is calculated using a specific algorithm:

// Simplified check digit calculation
function calculateCheckDigit(curp17chars) {
const weights = [18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2];
const charValues = {
'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,
'A':10,'B':11,'C':12,'D':13,'E':14,'F':15,'G':16,'H':17,'I':18,
'J':19,'K':20,'L':21,'M':22,'N':23,'Ñ':24,'O':25,'P':26,'Q':27,
'R':28,'S':29,'T':30,'U':31,'V':32,'W':33,'X':34,'Y':35,'Z':36
};
let sum = 0;
for (let i = 0; i < 17; i++) {
sum += charValues[curp17chars[i]] * weights[i];
}
const remainder = sum % 10;
return remainder === 0 ? 0 : 10 - remainder;
}

CURP validation enables and validates other Mexico reports:

Validates provided full_name against RENAPO data:

{
"name_check": {
"outcome": "PASSED",
"details": {
"score": 1.0,
"full_name": "JUAN MIGUEL DOE ROE",
"name_fragment_check": false,
"name_score_min": 1.0
}
}
}

Validates provided date_of_birth against RENAPO data:

{
"dob_check": {
"outcome": "PASSED",
"details": {
"provided_dob": "1900-01-01",
"registry_dob": "01-01-1900",
"match": true
}
}
}
Terminal window
curl -X POST "https://api.emptor.io/v3/mx/persons" \
-H "X-Api-Key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"document_id": "ABCD123456EFGHIJ78",
"city_locode": "MX MEX",
"pipeline": {
"name": "basic_id_check"
}
}'
Terminal window
curl -X GET "https://api.emptor.io/v3/mx/details/{person_id}/curp" \
-H "X-Api-Key: YOUR_API_KEY"
Error Type Description Resolution
INVALID_FORMAT CURP doesn’t match 18-character pattern Verify CURP format and characters
INVALID_CHECK_DIGIT Check digit calculation fails Verify CURP was entered correctly
INVALID_DATE Birth date in CURP is invalid Check date components (YYMMDD)
INVALID_STATE_CODE State code not recognized Verify state code is valid Mexican state
NOT_FOUND_IN_REGISTRY CURP not found in RENAPO Verify CURP exists and is active
REGISTRY_TIMEOUT RENAPO database timeout Retry after a few minutes
  • Input Validation: Always validate CURP format before API calls
  • Error Handling: Implement proper error handling for all validation failures
  • Retry Logic: Implement exponential backoff for registry timeouts
  • Data Privacy: Handle personal data according to Mexican privacy laws
  • Identity Verification: Primary identity check for Mexican individuals
  • Document Verification: Validate government-issued documents
  • KYC Compliance: Know Your Customer requirements
  • Employment Screening: Verify candidate identity
  • Financial Services: Account opening and verification
CURP → Name Check → DOB Check
CURP → Name Check → DOB Check → Criminal Records → Tax Records
CURP → Name Check → DOB Check → NSS → RFC → Criminal Records → Sanctions