VerifyMX Docs

Mexican documents

INE, CURP, RFC, passport — field maps, validation rules, MRZ format.

This document details the identity documents accepted by VerifyMX, their physical structure, data fields, and validation rules. Use it to understand what the OCR step extracts and how government verification works.


INE / IFE (National Electoral Credential)

The INE (Instituto Nacional Electoral) card is the primary identity document for Mexican citizens. It replaced the IFE card in 2014 and is issued in models C–H, each with distinct layout and security features.

Models

ModelYears issuedKey differences
C2008–2013IFE branding, no QR code, hologram strip
D2013–2014IFE → INE transition, first QR generation
E2014–2016INE branding, Aztec QR (encrypted)
F2017–2019Enhanced security, larger photo
G2020–2021Biometric revision, new font layout
H2022–presentCurrent generation, updated rear design

Front Fields

FieldDescriptionExample
nameFull name (APELLIDO1 APELLIDO2 NOMBRE)PÉREZ GARCÍA JUAN
dateOfBirthDD/MM/YYYY01/01/1980
claveElectoral key (18 chars)PEGJ800101HMCRRN09
curpCURP (18 chars)PEGJ800101HMCRRN09
sectionElectoral section (4 digits)0421
emissionEmission year2022
validityExpiry year2032
photoPortrait image extracted from card

Rear Fields

FieldDescription
mrz1Machine Readable Zone line 1 (OCR-B font)
mrz2Machine Readable Zone line 2
address.streetStreet and number
address.neighborhoodColonia
address.municipalityMunicipio
address.stateEstado
address.postalCodeCP
registrationYearYear voter registered

MRZ Format (Rear)

The INE rear carries a two-line MRZ in OCR-B format:

Line 1: IDMEX<clave><checkDigit><emission><validity><checkDigit><<<<<<<<
Line 2: <dateOfBirth><checkDigit><sex><address_hash><<<<<<<<<<<<<<checkDigit>

QR Code (Model E+)

From model E onwards, the front carries an Aztec QR code. The content is encrypted with an INE public key and contains a signed copy of the card's data fields plus a digital signature. VerifyMX decodes and validates the QR signature during the GOVERNMENT_VERIFY step.

Validation Rules

  • Electoral key (clave): 18 alphanumeric characters, checksum per INE spec
  • CURP embedded in clave must match the printed CURP
  • Expiry must be in the future for the verification to pass
  • Photo must match selfie with ≥ 0.85 similarity score (configurable per workflow)

CURP (Clave Única de Registro de Población)

The CURP is an 18-character alphanumeric key issued to every Mexican citizen and resident. It encodes biographical data and is used for cross-referencing against RENAPO (Registro Nacional de Población).

Structure

Position  1– 4  : First consonants of names and surnames
Position  5– 6  : Birth year (YY)
Position  7– 8  : Birth month (MM)
Position  9–10  : Birth day (DD)
Position    11  : State of birth (2-char code) — see table below
Position    12  : Sex (H = Hombre, M = Mujer, X = Non-binary since 2019)
Position 13–16  : Internal consonants (disambiguation sequence)
Position    17  : Century digit (0=1900s, A=2000s)
Position    18  : Check digit (0–9 or A–Z)

Example: PEGJ800101HMCRRN09

  • PEG = consonants from PÉREZ GARCÍA
  • J = first internal consonant
  • 800101 = born 1980-01-01
  • H = male
  • MC = state code (Mexico City / CDMX)
  • RRN = disambiguation
  • 0 = century (1900s)
  • 9 = check digit

State Codes

CodeState
ASAguascalientes
BCBaja California
BSBaja California Sur
CCCampeche
CLCoahuila
CMColima
CSChiapas
CHChihuahua
MCCiudad de México
DGDurango
GTGuanajuato
GRGuerrero
HGHidalgo
JCJalisco
MNMichoacán
MSMorelos
NTNayarit
NLNuevo León
OCOaxaca
PLPuebla
QTQuerétaro
QRQuintana Roo
SPSan Luis Potosí
SLSinaloa
SRSonora
TCTabasco
TSTamaulipas
TLTlaxcala
VZVeracruz
YNYucatán
ZSZacatecas
NEForeign-born residents

CURP Validation

VerifyMX validates:

  1. Length exactly 18 characters
  2. Check digit (position 18) per official algorithm
  3. Date encoded in positions 5–10 is a valid calendar date
  4. State code in positions 11–12 is in the official list
  5. Sex code in position 12 is H, M, or X
  6. RENAPO database lookup (during GOVERNMENT_VERIFY step) — confirms the CURP is registered and matches the biographical data on the document

Biometric CURP (2026)

Starting 2026, RENAPO is issuing a "CURP biométrica" that includes a facial biometric linked to the CURP. VerifyMX supports biometric CURP verification when available.


RFC (Registro Federal de Contribuyentes)

The RFC is a 12-character tax ID for individuals and a 12-character ID for companies. It is issued by the SAT (Servicio de Administración Tributaria).

Structure (Individuals — 13 chars)

Position  1– 4  : Consonants from names/surnames (same algorithm as CURP)
Position  5– 6  : Birth year (YY)
Position  7– 8  : Birth month (MM)
Position  9–10  : Birth day (DD)
Position 11–13  : Homoclave (3 alphanumeric chars assigned by SAT)

Example: PEGJ800101ABC

Structure (Companies — 12 chars)

Position  1– 3  : Acronym from company name
Position  4– 5  : Incorporation year (YY)
Position  6– 7  : Month (MM)
Position  8– 9  : Day (DD)
Position 10–12  : Homoclave

RFC Validation

  1. Length 12 (company) or 13 (individual)
  2. Date in positions 5–10 is a valid calendar date
  3. Homoclave follows SAT character set
  4. SAT 69-B list check — VerifyMX cross-references the RFC against the SAT Article 69-B "lista negra" of companies with cancelled fiscal obligations during aml/screen

Mexican Passport

Mexican passports comply with ICAO 9303 Machine Readable Travel Document standard.

MRZ Format

Two-line MRZ in OCR-B font at the bottom of the bio-data page:

Line 1 (44 chars):
  P<MEX<SURNAME<<GIVENNAMES<<<<<<<<<<<<<<<<<<

Line 2 (44 chars):
  <passport_number><check><MX><birth_date><check><sex><expiry_date><check><personal_num><check><composite_check>

Field breakdown:

FieldPositions (line 2)Description
Passport number1–9Alphanumeric document number
Check digit 110Luhn check on passport number
Country11–13Always MEX
Date of birth14–19YYMMDD
Check digit 220Luhn check on date of birth
Sex21M, F, or < (unspecified)
Expiry date22–27YYMMDD
Check digit 328Luhn check on expiry date
Personal number29–42CURP (14 chars) + <<<< padding
Check digit 443Luhn check on personal number
Composite check44Luhn check over fields 1–43

NFC Chip (ePassport)

Post-2019 Mexican passports contain an NFC chip (ICAO LDS1 compliant) with:

  • Data Group 1 (DG1): MRZ data
  • Data Group 2 (DG2): Facial biometric image
  • Document Security Object (SOD): Digital signature from SRE (Mexican foreign ministry)

VerifyMX can read and verify the NFC chip signature when the device has NFC hardware. The chip signature is the strongest proof of document authenticity.


Driver's Licence (Licencia de Conducir)

Driver's licences in Mexico are issued by individual states and vary significantly in layout and data fields. VerifyMX handles all 32 state variants.

Common Fields (all states)

FieldDescription
nameFull name
curpCURP (on most post-2015 licences)
dateOfBirthDate of birth
licenceNumberState-assigned licence number
categoryLicence category (A, B, C, D, E)
validityExpiry date
issueDateIssue date
restrictionsOptional restrictions code

Notes

  • Driver's licences are accepted for identity verification but not for government database cross-referencing (RENAPO only covers INE and passport).
  • The GOVERNMENT_VERIFY step is skipped or marked SKIPPED when the only document is a driver's licence.

Comprobante de Domicilio (Proof of Address)

CFE (electricity), TELMEX, and water utility bills are accepted as proof of address. The DOCUMENT_OCR step extracts:

FieldDescription
nameAccount holder name
address.streetStreet and number
address.neighborhoodColonia
address.municipalityMunicipio
address.stateEstado
address.postalCodeCP
issueDateBill date (must be within 90 days)
issuerUtility company (CFE, TELMEX, etc.)
accountNumberService account number

Validation Rules

  • Issue date must be within 90 days of the verification date.
  • Issuer must be from the approved utility list (CFE, TELMEX, IZZI, Totalplay, CAEM, SAPAM, municipal water authorities).
  • Address fields must be legible and match the INE address if cross-referencing.

OCR Confidence Scores

Every extracted field includes a confidence score (0–1). Fields below 0.75 are flagged for manual review. You can configure per-workflow thresholds via the config property on the DOCUMENT_OCR step:

{
  "type": "DOCUMENT_OCR",
  "order": 0,
  "config": {
    "minFieldConfidence": 0.80,
    "requiredFields": ["name", "curp", "dateOfBirth", "clave"],
    "allowExpired": false
  }
}

On this page