Volver al blog

Cómo Leer la MRZ de un Pasaporte Línea por Línea (Guía de Posiciones)

Mapa completo de las 88 posiciones de la MRZ de un pasaporte: qué contiene cada carácter de las dos líneas, cómo se codifican los nombres, por qué las fechas no llevan siglo y cómo decodificarla a mano.

Extraer Datos de Pasaporte
MRZleer MRZzona de lectura mecánicaICAO 9303TD3pasaporte

La MRZ de un pasaporte no es texto libre: es un formato de ancho fijo donde cada posición está definida por el estándar ICAO 9303. Si sabes qué hay en cada una, puedes decodificar un pasaporte a mano, sin software.

Esta guía es el mapa completo de esas 88 posiciones. Es la referencia que conviene tener abierta cuando estás depurando una integración y necesitas saber por qué el campo 7 salió vacío.

El formato TD3

Los pasaportes usan el formato TD3: dos líneas de exactamente 44 caracteres cada una, impresas al pie de la página de datos. El alfabeto está restringido a A-Z, 0-9 y < (el carácter de relleno). No hay minúsculas, no hay acentos, no hay espacios.

Trabajaremos sobre este ejemplo real y válido:

P<MEXGOMEZ<VELAZQUEZ<<MARGARITA<<<<<<<<<<<<<
G123456786MEX8007050F3307054<<<<<<<<<<<<<<08

Línea 1: documento, país y nombre

PosicionesContenidoEn el ejemplo
1Tipo de documento — P para pasaporteP
2Subtipo, a discreción del emisor; casi siempre relleno<
3-5País emisor, código de 3 letrasMEX
6-44Campo de nombre, 39 caracteresGOMEZ<VELAZQUEZ<<MARGARITA<<<...

Cómo se codifica el nombre

El campo de nombre concentra la mayoría de los errores de integración, porque su estructura no es obvia:

  • Los apellidos van primero.
  • Un doble << separa los apellidos de los nombres de pila.
  • Un < sencillo separa palabras dentro de cada bloque.
  • El resto se rellena con < hasta completar los 39 caracteres.

Así, GOMEZ<VELAZQUEZ<<MARGARITA se lee: apellidos Gómez Velázquez, nombre Margarita.

Dos consecuencias prácticas para quien procesa pasaportes mexicanos:

Los acentos y la ñ desaparecen. ICAO 9303 solo admite A-Z, así que la transliteración es obligatoria: VelázquezVELAZQUEZ, MuñozMUNOZ, PeñaPENA. Si comparas el nombre de la MRZ contra el de tu base de datos carácter por carácter, todos los apellidos con ñ o acento fallarán. Normaliza ambos lados antes de comparar.

Los nombres largos se truncan. 39 caracteres se agotan rápido con dos apellidos y dos nombres de pila. Cuando no cabe, el emisor recorta — y el nombre truncado es el dato oficial de la MRZ, no un error de lectura. Por eso conviene leer también la zona visual (VIZ) de la página, donde el nombre aparece completo.

Línea 2: los datos que importan

PosicionesContenidoEn el ejemplo
1-9Número de pasaporteG12345678
10Dígito verificador del número de pasaporte6
11-13Nacionalidad, código de 3 letrasMEX
14-19Fecha de nacimiento, AAMMDD800705
20Dígito verificador de la fecha de nacimiento0
21Sexo — M, F, X o <F
22-27Fecha de vencimiento, AAMMDD330705
28Dígito verificador del vencimiento4
29-42Número personal, 14 caracteres<<<<<<<<<<<<<<
43Dígito verificador del número personal0
44Dígito compuesto sobre todos los anteriores8

Decodificado: pasaporte G12345678 de México, titular nacida el 05/07/1980, sexo F, vigente hasta el 05/07/2033.

Las fechas no llevan siglo

AAMMDD son seis dígitos: 800705 es el 5 de julio, pero ¿de 1980 o de 2080? La MRZ no lo dice. La convención práctica:

  • Vencimiento: siempre en el futuro, así que siempre 20xx.
  • Nacimiento: si los dos dígitos son mayores que el año actual en curso, es 19xx; si no, 20xx.

La heurística falla en un solo caso realista: personas de más de 100 años. Si tu sistema atiende a población de edad muy avanzada, resuelve el siglo contra la fecha de vencimiento en lugar de asumirlo.

El número personal es un campo libre

Las posiciones 29-42 son las más malinterpretadas de la MRZ. Cada país decide qué pone ahí, y muchos no ponen nada — de ahí los catorce < del ejemplo. No asumas que ese campo trae un identificador nacional.

Conviene notar un límite duro: el campo tiene 14 caracteres y la CURP tiene 18, así que una CURP completa no cabe en la MRZ de ningún pasaporte. En los pasaportes mexicanos la CURP se lee de la zona visual de la página de datos, no de la MRZ. Es una de las razones por las que una extracción seria lee ambas zonas y no solo las dos líneas del pie.

El relleno < no es opcional

Un error frecuente al construir MRZ de prueba: recortar los < finales. Una línea de 41 caracteres no es una MRZ válida, y cualquier validador que respete el estándar la rechazará antes de mirar su contenido. Las dos líneas miden 44 caracteres exactos, siempre, sin excepción.

Al leer, el tratamiento inverso: los < se traducen a espacios o se descartan según el campo. En un nombre, < sencillo es un separador de palabras; al final de un campo, es solo relleno.

Los cuatro dígitos que lo verifican todo

Habrás notado cuatro dígitos verificadores en la línea 2. Son lo que convierte a la MRZ en el campo más confiable de cualquier documento de identidad: permiten detectar un error de lectura antes de guardar el dato, con aritmética, sin consultar ningún registro externo.

El algoritmo es público y cabe en diez líneas de código. Lo desarrollamos completo, con la aritmética paso a paso sobre este mismo ejemplo, en Dígitos verificadores ICAO 9303: cómo se calculan.

Pruébalo con una MRZ real

Puedes pegar cualquier MRZ en nuestro validador MRZ gratuito: decodifica los campos, recalcula los cuatro dígitos verificadores y te señala exactamente cuál no cuadra. No requiere cuenta y corre sobre el mismo código que usa nuestro motor de extracción, así que lo que ves ahí es literalmente lo que aplicamos en producción.

Si en lugar de decodificar a mano quieres que una API te devuelva los campos ya estructurados y verificados a partir de una foto, la demo gratuita procesa un pasaporte sin registro y la documentación muestra la integración completa en JavaScript, Python y PHP.

¿Necesitas extraer datos de pasaportes automáticamente?

Prueba nuestra API con 20 extracciones gratis. Integración en minutos, resultados en segundos.

Comenzar gratis