Formatos MRZ: TD1, TD2 y TD3 (Diferencias y Cómo Detectarlos)
Los tres formatos de zona de lectura mecánica de ICAO 9303: cuántas líneas tiene cada uno, qué documentos los usan, dónde cambian las posiciones de los campos y cómo detectar el formato automáticamente.
No todas las MRZ son iguales. ICAO 9303 define tres formatos según el tamaño físico del documento, y confundirlos es la causa de una clase entera de errores de integración: el código lee las posiciones de un TD3 sobre un TD1 y devuelve basura sin avisar.
Los tres formatos
| Formato | Líneas | Caracteres por línea | Total | Documentos típicos |
|---|---|---|---|---|
| TD1 | 3 | 30 | 90 | Tarjetas de identidad, permisos de residencia |
| TD2 | 2 | 36 | 72 | Documentos de viaje en formato libreta pequeña |
| TD3 | 2 | 44 | 88 | Pasaportes |
Si trabajas con pasaportes, trabajas con TD3 casi siempre. Los otros dos aparecen cuando tu flujo acepta también documentos de identidad o permisos de residencia.
TD3 — el pasaporte
Dos líneas de 44 caracteres. Es el formato que hemos venido desarrollando:
P<MEXGOMEZ<VELAZQUEZ<<MARGARITA<<<<<<<<<<<<<
G123456786MEX8007050F3307054<<<<<<<<<<<<<<08
La línea 1 lleva tipo, país emisor y nombre; la línea 2, todos los datos verificables. El mapa completo de posiciones está en Cómo leer la MRZ línea por línea.
TD1 — la tarjeta
Tres líneas de 30 caracteres. Es el formato de las tarjetas tamaño credencial, y su distribución es notablemente distinta:
I<UTOD231458907<<<<<<<<<<<<<<<
7408122F1204159UTO<<<<<<<<<<<6
ERIKSSON<<ANNA<MARIA<<<<<<<<<<
Las diferencias que rompen el código escrito para TD3:
- El nombre va en la línea 3, no en la 1.
- El número de documento está en la línea 1 (posiciones 6-14), no en la 2.
- Las fechas están en la línea 2: nacimiento en 1-6, vencimiento en 9-14.
- Hay un dígito compuesto al final de la línea 2 que abarca fragmentos de las líneas 1 y 2.
Un lector que asuma "el nombre está en la primera línea" devolverá el número de documento como si fuera un apellido. Y lo hará en silencio, porque sintácticamente no hay nada inválido.
TD2 — el intermedio
Dos líneas de 36 caracteres. Estructuralmente se parece al TD3 —nombre en la línea 1, datos en la línea 2— pero todas las posiciones de la línea 2 están desplazadas porque el campo de nombre y el de número personal son más cortos.
Esta es la trampa más sutil de las tres: el código escrito para TD3 no falla estrepitosamente sobre un TD2, sino que lee campos corridos unas posiciones. El resultado tiene la forma correcta y el contenido equivocado.
Detectar el formato automáticamente
La detección es trivial y no hay excusa para no hacerla: el formato queda determinado por el número de líneas y su longitud.
function detectarFormatoMrz(lineas) {
const limpias = lineas
.map((l) => l.trim().toUpperCase())
.filter(Boolean)
const n = limpias.length
const longitudes = limpias.map((l) => l.length)
const todasMiden = (n) => longitudes.every((l) => l === n)
if (n === 3 && todasMiden(30)) return 'TD1'
if (n === 2 && todasMiden(36)) return 'TD2'
if (n === 2 && todasMiden(44)) return 'TD3'
return null // Formato desconocido: no adivines las posiciones.
}
Ese return null es la parte importante. Cuando el formato no se reconoce, el error correcto es rechazar, no elegir el más probable. Adivinar produce datos plausibles y falsos, que es la peor categoría de fallo: pasan las validaciones de forma de tu sistema y llegan a la base de datos.
Lo que los tres comparten
Por debajo de las diferencias de distribución, la mecánica es idéntica en los tres formatos:
- Alfabeto: solo
A-Z,0-9y<. - Relleno:
<completa cada campo hasta su longitud fija. - Nombres: apellidos,
<<, nombres de pila,<entre palabras. - Fechas:
AAMMDD, sin siglo. - Dígitos verificadores: el mismo algoritmo 7-3-1 módulo 10, explicado en Dígitos verificadores ICAO 9303.
Es decir: si ya implementaste el cálculo de dígitos para TD3, te sirve tal cual para los otros dos. Lo único que cambia es de qué franjas se extraen los datos.
Cuándo te vas a encontrar cada uno
En un flujo de verificación de identidad real:
- Pasaporte (TD3) — viajeros, extranjeros, KYC internacional. El más común.
- Documento de identidad (TD1) — cuando aceptas identificaciones nacionales de países que emiten en formato tarjeta.
- TD2 — el menos frecuente; aparece con ciertos documentos de viaje y permisos.
Si tu producto acepta "identificación oficial" sin acotar el tipo, tarde o temprano llegarán los tres. Vale más detectar el formato desde el principio que descubrirlo cuando un cliente reporte nombres corridos.
Pruébalo
Nuestro validador MRZ está construido para TD3, el formato de los pasaportes: pega las dos líneas y verás cada campo decodificado con sus cuatro dígitos verificadores recalculados. Es el mismo código que corre en nuestro motor de extracción, así que lo que ves ahí es lo que aplicamos en producción.
Nuestra API se especializa igualmente en pasaportes, y devuelve las dos líneas MRZ completas y validadas junto con los campos ya estructurados. Puedes probarla sin registro en la demo gratuita.
¿Necesitas extraer datos de pasaportes automáticamente?
Prueba nuestra API con 20 extracciones gratis. Integración en minutos, resultados en segundos.
Comenzar gratis