Leitor de MRZ e calculadora de dígito verificador

Cole a zona de leitura mecânica (MRZ) de um passaporte, documento de identidade ou visto – TD3, TD2 ou TD1. O formato é detectado, cada campo é lido e cada dígito verificador da ICAO 9303 é recalculado e comparado com o impresso. Tudo roda no seu navegador; nada sai da página.

O que é uma zona de leitura mecânica

Uma zona de leitura mecânica (MRZ) é o bloco de linhas de largura fixa no pé de um passaporte ou documento de identidade, padronizado pelo Doc 9303 da ICAO. Codifica em posições fixas o número do documento, Estado emissor, nome, nacionalidade, data de nascimento, sexo e validade, com dígitos verificadores que conferem a leitura.

Onde fica cada campo no TD1, TD2 e TD3

As posições são contadas a partir de 1 em cada linha, como a ICAO 9303 as numera. Cada dígito verificador fica logo depois do campo que protege; o dígito composto é o último caractere da sua linha.

Posições dos campos e dos dígitos verificadores nos três formatos de MRZ
CampoTD3 (passaporte)TD2TD1 (carteira de identidade)
Código do documentolinha 1, 1–2linha 1, 1–2linha 1, 1–2
Estado emissorlinha 1, 3–5linha 1, 3–5linha 1, 3–5
Nomelinha 1, 6–44linha 1, 6–36linha 3, 1–30
Número do documentolinha 2, 1–9linha 2, 1–9linha 1, 6–14
seu dígito verificadorlinha 2, 10linha 2, 10linha 1, 15
Nacionalidadelinha 2, 11–13linha 2, 11–13linha 2, 16–18
Data de nascimentolinha 2, 14–19linha 2, 14–19linha 2, 1–6
seu dígito verificadorlinha 2, 20linha 2, 20linha 2, 7
Sexolinha 2, 21linha 2, 21linha 2, 8
Data de validadelinha 2, 22–27linha 2, 22–27linha 2, 9–14
seu dígito verificadorlinha 2, 28linha 2, 28linha 2, 15
Número pessoallinha 2, 29–42
seu dígito verificadorlinha 2, 43
Dígito verificador compostolinha 2, 44linha 2, 36linha 2, 30

Como um dígito verificador é calculado

  1. Pegue o campo que o dígito protege – o número do documento, a data de nascimento, a data de validade, o número pessoal ou todo o intervalo do dígito composto.
  2. Dê a cada caractere o seu valor: um algarismo vale ele mesmo, uma letra vale a sua posição no alfabeto mais nove (A = 10, Z = 35) e o preenchimento < vale zero.
  3. Multiplique cada valor pelo peso da sua posição. Os pesos se repetem 7, 3, 1 ao longo do campo, começando por 7 no primeiro caractere.
  4. Some todos os produtos.
  5. O dígito verificador é essa soma módulo 10 – o último algarismo do total.

O cálculo feito passo a passo com o número de passaporte do espécime, AM7304518 – um documento inventado que não pertence a ninguém:

A ponderação 7-3-1 aplicada caractere por caractere ao número de documento de um espécime
CaractereValorPesoProduto
A10770
M22366
7717
33721
0030
4414
55735
1133
8818
Soma, depois módulo 10214 → 4

Então o dígito impresso depois de AM7304518 nessa zona é 4. Carregue o exemplo TD3 acima e o leitor recalcula o mesmo número na sua frente.

O dígito composto

Mais um dígito cobre quase toda a zona de uma vez: o composto. Ele é calculado do mesmo jeito, sobre um intervalo que pula os campos que nenhum dígito protege – e no TD1 esse intervalo abrange duas linhas, que é onde um leitor escrito à mão costuma errar. Uma zona cujos dígitos de campo passam todos, mas cujo composto falha, foi transcrita corretamente por partes e montada de forma errada.

O que os dígitos não cobrem

Nenhum dígito verificador cobre o nome, e nenhum cobre o Estado emissor. Um erro de leitura em qualquer um dos dois passa em silêncio: a conta continua fechando. Por isso ler também a face impressa do documento e comparar as duas leituras pega o que os dígitos não conseguem.

Perguntas frequentes

O que é uma MRZ?

Uma zona de leitura mecânica (MRZ) é o bloco de linhas de largura fixa no pé de um passaporte ou documento de identidade, padronizado pelo Doc 9303 da ICAO. Codifica em posições fixas o número do documento, Estado emissor, nome, nacionalidade, data de nascimento, sexo e validade, com dígitos verificadores que conferem a leitura.

Quais formatos esta ferramenta aceita?

Os três formatos da ICAO 9303: TD3, as duas linhas de 44 de um passaporte; TD2, duas linhas de 36; e TD1, as três linhas de 30 de uma carteira de identidade ou autorização de residência. Ela também lê os dois formatos de visto, MRV-A e MRV-B, que não têm dígito composto. O formato é detectado pelo número de linhas e pelo comprimento delas, e cada dígito verificador que o formato tem é recalculado.

Por que um dígito verificador falha?

Quase sempre porque um caractere do campo que ele protege foi lido ou digitado errado: um O no lugar de um 0, um B no lugar de um 8, um preenchimento perdido no fim de uma linha. A tabela mostra o dígito que a zona imprime ao lado do que os dados dão, e o campo que o dígito cobre. Quando um dígito de campo passa e o composto falha, olhe os caracteres entre os campos – o composto também cobre os próprios dígitos de campo.

Dá para ler a zona a partir de uma foto?

Não. Esta página lê o texto que você cola, e nada sai do seu navegador. Ler a zona e a página impressa a partir de uma foto é o que a API de reconhecimento faz: uma chamada HTTP com a imagem, e os campos voltam em JSON com os mesmos dígitos verificadores já conferidos.

Vocês guardam algum dado meu?

Não. A zona que você cola é interpretada por código que roda no seu próprio navegador: nada é enviado, e nenhuma requisição que a contenha é feita. Esta página é um arquivo estático, e a única requisição que ela faz depois de carregar é para perguntar se há algum aviso do serviço para mostrar no topo – uma chamada que não leva nada do que você digitou. A API de reconhecimento é outra coisa, que você precisa chamar de propósito.

Para onde ir depois

  • Gerador de MRZ – monte uma zona válida com dígitos verificadores corretos para dados de teste.
  • TD1, TD2 e TD3 – os três formatos, quantas linhas e caracteres cada um tem e onde o padrão define cada um.
  • Ler um documento inteiro – a face impressa além da codificada, em uma só requisição e sem conta.
  • OCR de passaportes por país – os Estados emissores que esta API lê, cada um com a sua própria zona de espécime.