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.

FieldTypeDescriptionExample
document_idstring18-character CURP codeABCD123456EFGHIJ78
city_locodestringUN LOCODE of the cityMX MEX
FieldTypeDescriptionDefault
full_namestringExpected full name for verificationnull
date_of_birthstringExpected date of birth (YYYY-MM-DD)null

The CURP follows a specific 18-character format:

ABCD123456EFGHIJ78
PositionCharactersDescriptionExample
1-2LettersFirst surname initial + vowelAB
3-4LettersSecond surname + first name initialsCD
5-10NumbersBirth date (YYMMDD)123456
11LetterGender (H=Male, M=Female)E
12-13LettersBirth state codeFG
14-16LettersInternal consonantsHIJ
17Number/LetterHomonym differentiator7
18NumberCheck digit8

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 TypeDescriptionResolution
INVALID_FORMATCURP doesn’t match 18-character patternVerify CURP format and characters
INVALID_CHECK_DIGITCheck digit calculation failsVerify CURP was entered correctly
INVALID_DATEBirth date in CURP is invalidCheck date components (YYMMDD)
INVALID_STATE_CODEState code not recognizedVerify state code is valid Mexican state
NOT_FOUND_IN_REGISTRYCURP not found in RENAPOVerify CURP exists and is active
REGISTRY_TIMEOUTRENAPO database timeoutRetry 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