El pasaporte británico es uno de los documentos que más aparecen en un proceso de alta de clientes en el Reino Unido. HM Passport Office, que se describe a sí misma como "el único emisor de pasaportes del Reino Unido", es responsable, en sus propias palabras, "de la expedición de más de 6 millones de pasaportes cada año a ciudadanos británicos y a otros nacionales británicos". Si tu producto verifica clientes en el Reino Unido, vas a leer muchos.
Este artículo es para desarrolladores que necesitan sacar los datos de un pasaporte británico y llevarlos a su propio sistema. Explica qué hay en la página de datos, cómo está organizada la zona de lectura mecánica, qué diseños vas a encontrar en 2026 y qué devuelve una sola llamada a la API. Todo lo que se dice sobre el pasaporte está citado de GOV.UK o de la OACI, con el enlace donde aparece; los originales están en inglés y las traducciones son nuestras.
Este es el blog de doc.cheap, una API de OCR para pasaportes y documentos de identidad. Lee la parte del producto teniéndolo en cuenta.
La página de datos en una imagen
La propia guía de información histórica sobre pasaportes de HM Passport Office describe la libreta actual. "El 1 de marzo de 2020 se introdujo progresivamente en la producción el pasaporte electrónico de la serie C del Reino Unido (pasaporte electrónico azul)." Según la misma página, el pasaporte:
- "tiene una página de datos personales de policarbonato resistente al desgaste al principio de la libreta"
- "tiene las observaciones impresas en la página 3"
- "muestra la foto de pasaporte del cliente 3 veces dentro de la libreta"
- "tiene el chip electrónico, integrado en la página de datos personales"
Para el OCR esto significa una sola cosa: todo lo que necesitas está en una página al principio. Fotografía esa página, plana y entera, y tendrás en una imagen los campos impresos, el retrato y la zona de lectura mecánica. El chip está dentro de esa misma página, pero una foto no puede leer un chip; lo que te da una imagen es la página impresa.
La zona de lectura mecánica
La MRZ es el bloque de letras mayúsculas, dígitos y caracteres de relleno < en la parte inferior de la página de datos. La misma guía explica de dónde viene: "Los datos personales del cliente se convierten en caracteres que pueden leer los lectores de pasaportes. Los caracteres se añaden al pasaporte en 2 líneas de 44 caracteres cada una. Esta información se conoce como zona de lectura mecánica."
Dos líneas de 44 caracteres es el formato de pasaporte del Doc 9303 de la OACI. La página de la OACI sobre el Doc 9303 titula su Parte 4 "Especificaciones para pasaportes de lectura mecánica (MRP) y otros MRTD de tamaño TD3", y por eso el formato del pasaporte se llama TD3. Las Partes 5 y 6 tratan los tamaños menores TD1 y TD2, los que usan los documentos de identidad.
Al describir las primeras libretas británicas de lectura mecánica, la guía enumera lo que contiene la zona: el nombre del cliente, el número de pasaporte, los dígitos de control, la nacionalidad, la fecha de nacimiento, el sexo, la fecha de caducidad del pasaporte y un número de identidad personal. Los dígitos de control se calculan sobre esos campos, así que un carácter mal leído suele delatarse con un dígito que no cuadra. Eso hace de la MRZ la única parte de la página que puedes volver a comprobar tú mismo, sin fiarte de quien la haya leído.
Dos detalles prácticos para un parser:
- No hay fecha de expedición. La zona no la incluye. Si la necesitas, tiene que salir de la página impresa.
- La nacionalidad no siempre es
GBR. Los códigos de país de la zona siguen el Doc 9303 de la OACI, no la ISO, y las clases de nacionalidad británica tienen códigos propios. La referencia de la respuesta de doc.cheap enumera cinco además deGBR–GBD,GBN,GBO,GBPyGBS–, así que un parser que solo acepteGBRrechazará algunos pasaportes británicos.
Qué diseños vas a encontrar
Hay más de un diseño de pasaporte británico válido a la vez, así que no construyas una comprobación que espere un único aspecto.
- La libreta azul de 2020. El pasaporte electrónico de la serie C descrito arriba.
- El nuevo diseño desde diciembre de 2025. GOV.UK anunció que "Los primeros pasaportes británicos con el escudo de armas de Su Majestad el rey Carlos III se expedirán a partir de diciembre como parte de un diseño renovado", y lo llamó "el primer diseño completamente nuevo desde 2020".
- Libretas antiguas todavía vigentes. El mismo anuncio dice: "Los pasaportes expedidos con el escudo de armas de la reina Isabel II siguen siendo válidos hasta su fecha de caducidad."
La validez también tiene una trampa. Antes de octubre de 2018, una renovación podía arrastrar el tiempo que le quedaba a la libreta anterior: la guía pone el ejemplo de un adulto que renovó con 7 meses restantes y recibió un pasaporte "válido durante 10 años y 7 meses". Desde octubre de 2018, las renovaciones reciben "no más de: 10 años de validez (para adultos), 5 años de validez (para niños)". Así que lee la fecha de caducidad en el documento; no la calcules a partir de la fecha de expedición.
Leerlo con una sola llamada a la API
doc.cheap lee el pasaporte a partir de una imagen: un POST /v1/scans con la foto codificada en base64 dentro de un cuerpo JSON. La clave pública de sandbox sk_sandbox_public funciona sin cuenta. Úsala con una imagen de muestra, nunca con un pasaporte real, porque los escaneos hechos con la clave pública se guardan durante un año.
curl -X POST https://api.doc.cheap/v1/scans \
-H "Authorization: Bearer sk_sandbox_public" \
-H "Content-Type: application/json" \
-d "{\"image\": \"$(base64 < document.jpg | tr -d '\n')\",
\"options\": {\"expect_country\": \"GBR\", \"return_portrait\": false}}"
expect_country pasa el emisor como pista cuando ya lo conoces, y return_portrait: false deja la cara del titular fuera de la respuesta. Las partes de la respuesta que importan para un pasaporte británico tienen este aspecto, con valores inventados:
{
"document": {
"kind": "passport",
"issuing_state": "GBR",
"issuing_state_detail": { "code": "GBR", "alpha3": "GBR", "alpha2": "GB", "category": "iso" },
"number": "000000000",
"issue_date": "2025-12-01",
"expiry_date": "2035-12-01",
"is_expired": false
},
"holder": {
"surname": "SPECIMEN",
"given_names": "ANGELA ZOE",
"birth_date": "1990-01-01",
"nationality": "GBR"
},
"mrz": { "status": "passed", "reason": null },
"authenticity": { "overall": "not_checked", "checks": [] }
}
Qué leer en ella:
mrz.statusespassed,failedoabsent.passedsignifica que todos los dígitos de control han validado y que nada en la zona contradice la página impresa. Confailed,mrz.reasonnombra el campo, así que sabes si debes pedir una foto nueva.mrz.textlleva la zona como una sola cadena por si quieres recalcular los dígitos tú mismo; la guía de comprobación de la MRZ lo explica paso a paso.document.issue_datesale de la página impresa, porque la zona no la tiene.holder.nationality_detailconservaGBDy los demás códigos británicos tal como están escritos, concategoryenbritish_nationalityyalpha3enGBR, para que puedas agrupar por Estado sin perder la clase.
La página de OCR de pasaporte británico reúne los mismos datos en un solo lugar, con los enlaces a GOV.UK y a la OACI.
Lo que el OCR no te dice
Leer un pasaporte y verificarlo son trabajos distintos. doc.cheap lee lo que está impreso y comprueba la MRZ consigo misma y con la zona visual. No comprueba si el documento es auténtico: en el escenario de solo reconocimiento, authenticity.overall es not_checked, y no lee el chip. Si tu proceso necesita un cotejo facial, una prueba de vida o una comprobación de autenticidad, son pasos aparte, con herramientas hechas para ellos.
Pruébalo
La clave pública de sandbox no necesita cuenta. Al registrarte recibes 100 reconocimientos gratis cada mes con tu propia clave, suficientes para construir y probar todo el proceso. Si estás eligiendo proveedor, la comparativa de API de OCR de pasaportes pone los precios publicados uno al lado del otro, y la página de OCR de pasaporte británico es el punto de partida para documentos británicos.
Una pregunta para ti: ¿qué parte del pasaporte británico le ha dado más problemas a tu parser: los códigos de nacionalidad, las antiguas normas de validez u otra cosa? Cuéntanoslo en los comentarios.