O passaporte britânico é um dos documentos que um fluxo de cadastro de clientes no Reino Unido mais recebe. O HM Passport Office, que se descreve como "o único emissor de passaportes do Reino Unido", é responsável, em suas próprias palavras, "pela emissão de mais de 6 milhões de passaportes por ano para cidadãos britânicos e outros nacionais britânicos". Se o seu produto verifica clientes no Reino Unido, você vai ler muitos deles.
Este post é para desenvolvedores que precisam tirar os dados de um passaporte britânico e levá-los para o próprio sistema. Ele mostra o que há na página de dados, como a zona de leitura mecânica é organizada, quais modelos você vai encontrar em 2026 e o que uma única chamada de API devolve. Tudo o que se diz sobre o passaporte em si é citado do GOV.UK ou da OACI, com o link onde aparece; os originais estão em inglês e as traduções são nossas.
Este é o blog do doc.cheap, uma API de OCR para passaportes e documentos de identidade. Leia a parte sobre o produto com isso em mente.
A página de dados em uma imagem
O próprio guia de informações históricas sobre passaportes do HM Passport Office descreve a caderneta atual. "Em 1º de março de 2020, o passaporte eletrônico série C do Reino Unido (passaporte eletrônico azul) entrou gradualmente em produção." Segundo a mesma página, o passaporte:
- "tem uma página de dados pessoais em policarbonato resistente ao desgaste na frente da caderneta"
- "tem observações impressas na página 3"
- "mostra a foto de passaporte do cliente 3 vezes dentro da caderneta"
- "tem o chip eletrônico, embutido na página de dados pessoais"
Para o OCR, isso significa uma coisa só: tudo o que você precisa está em uma página na frente. Fotografe essa página, plana e inteira, e você terá em uma imagem os campos impressos, o retrato e a zona de leitura mecânica. O chip fica dentro dessa mesma página, mas uma foto não lê chip; o que uma imagem entrega é a página impressa.
A zona de leitura mecânica
A MRZ é o bloco de letras maiúsculas, dígitos e caracteres de preenchimento < na parte de baixo da página de dados. O mesmo guia explica de onde ela vem: "Os dados pessoais do cliente são convertidos em caracteres que podem ser lidos por leitores de passaporte. Os caracteres são adicionados ao passaporte em 2 linhas de 44 caracteres cada. Essa informação é conhecida como zona de leitura mecânica."
Duas linhas de 44 caracteres é o formato de passaporte do Doc 9303 da OACI. A página da OACI sobre o Doc 9303 dá à Parte 4 o título "Especificações para passaportes de leitura mecânica (MRPs) e outros MRTDs de tamanho TD3", e é por isso que o formato do passaporte se chama TD3. As Partes 5 e 6 tratam dos tamanhos menores TD1 e TD2, os usados em documentos de identidade.
Ao descrever as primeiras cadernetas britânicas de leitura mecânica, o guia lista o que a zona contém: o nome do cliente, o número do passaporte, os dígitos verificadores, a nacionalidade, a data de nascimento, o sexo, a data de validade do passaporte e um número de identidade pessoal. Os dígitos verificadores são calculados sobre esses campos, então um caractere mal lido costuma aparecer como um dígito que não fecha a conta. Isso faz da MRZ a única parte da página que você pode conferir de novo por conta própria, sem confiar em quem a leu.
Dois pontos práticos para um parser:
- Não há data de emissão. A zona não traz essa data. Se você precisar dela, ela tem que vir da página impressa.
- A nacionalidade nem sempre é
GBR. Os códigos de país da zona seguem o Doc 9303 da OACI, não a ISO, e as classes de nacionalidade britânica têm códigos próprios. A referência da resposta do doc.cheap lista cinco além deGBR–GBD,GBN,GBO,GBPeGBS–, então um parser que só aceitaGBRvai rejeitar alguns passaportes britânicos.
Quais modelos você vai encontrar
Mais de um modelo de passaporte britânico é válido ao mesmo tempo, então não construa uma verificação que espere uma única aparência.
- A caderneta azul de 2020. O passaporte eletrônico série C descrito acima.
- O novo modelo a partir de dezembro de 2025. O GOV.UK anunciou que "Os primeiros passaportes britânicos com o brasão de armas de Sua Majestade o Rei Charles III serão emitidos a partir de dezembro como parte de um design renovado", chamando-o de "o primeiro design totalmente novo desde 2020".
- Cadernetas antigas ainda dentro da validade. O mesmo anúncio diz: "Os passaportes emitidos com o brasão de armas da Rainha Elizabeth II continuam válidos até a data de validade."
A validade também tem uma armadilha. Antes de outubro de 2018, uma renovação podia levar o tempo que restava na caderneta antiga: o guia dá o exemplo de um adulto que renovou com 7 meses restantes e recebeu um passaporte "válido por 10 anos e 7 meses". Desde outubro de 2018, as renovações recebem "no máximo: 10 anos de validade (para adultos), 5 anos de validade (para crianças)". Então leia a data de validade no documento; não a calcule a partir da data de emissão.
Lendo com uma única chamada de API
O doc.cheap lê o passaporte a partir de uma imagem: um POST /v1/scans com a foto codificada em base64 em um corpo JSON. A chave pública de sandbox sk_sandbox_public funciona sem conta. Use-a com uma imagem de amostra, nunca com um passaporte real, porque os escaneamentos feitos com a chave pública ficam guardados por um ano.
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 passa o emissor como dica quando você já o conhece, e return_portrait: false deixa o rosto do titular fora da resposta. As partes da resposta que importam para um passaporte britânico ficam assim, com 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": [] }
}
O que ler nela:
mrz.statusépassed,failedouabsent.passedsignifica que todos os dígitos verificadores foram validados e que nada na zona contradiz a página impressa. Comfailed,mrz.reasonindica o campo, então você sabe se deve pedir uma nova foto.mrz.texttraz a zona como uma única string, caso você queira recalcular os dígitos por conta própria; o guia de verificação da MRZ mostra o passo a passo.document.issue_datevem da página impressa, porque a zona não tem essa data.holder.nationality_detailmantémGBDe os outros códigos britânicos como estão escritos, comcategoryigual abritish_nationalityealpha3igual aGBR, para que você possa agrupar pelo Estado sem perder a classe.
A página de OCR de passaporte britânico reúne os mesmos fatos em um só lugar, com os links para o GOV.UK e a OACI.
O que o OCR não diz
Ler um passaporte e verificá-lo são trabalhos diferentes. O doc.cheap lê o que está impresso e confere a MRZ com ela mesma e com a zona visual. Ele não verifica se o documento é autêntico: no cenário só de reconhecimento, authenticity.overall é not_checked, e ele não lê o chip. Se o seu fluxo precisa de comparação facial, prova de vida ou verificação de autenticidade, essas são etapas separadas, com ferramentas feitas para elas.
Experimente
A chave pública de sandbox não precisa de conta. Ao se cadastrar, você recebe 100 reconhecimentos grátis todo mês na sua própria chave, o suficiente para construir e testar o fluxo inteiro. Se você está escolhendo um fornecedor, a comparação de APIs de OCR de passaporte coloca os preços publicados lado a lado, e a página de OCR de passaporte britânico é o ponto de partida para documentos britânicos.
Uma pergunta para você: qual parte do passaporte britânico mais deu trabalho ao seu parser – os códigos de nacionalidade, as antigas normas de validade ou outra coisa? Conte para a gente nos comentários.