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 de GBR – GBD, GBN, GBO, GBP e GBS –, então um parser que só aceita GBR vai 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, failed ou absent. passed significa que todos os dígitos verificadores foram validados e que nada na zona contradiz a página impressa. Com failed, mrz.reason indica o campo, então você sabe se deve pedir uma nova foto. mrz.text traz 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_date vem da página impressa, porque a zona não tem essa data.
  • holder.nationality_detail mantém GBD e os outros códigos britânicos como estão escritos, com category igual a british_nationality e alpha3 igual a GBR, 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.