Como funcionam os dígitos verificadores dos códigos de barras (EAN-13, UPC-A, EAN-8)
Quase todo produto que você compra traz um código de barras cujo último dígito não faz parte do número do produto — é um dígito verificador, um único dígito calculado a partir dos demais para detectar erros de leitura e de digitação. Este guia explica como esse dígito funciona nos três formatos de varejo mais comuns — EAN-13, UPC-A e EAN-8 — com um exemplo resolvido que você pode acompanhar à mão.
Para que serve um dígito verificador
Um dígito verificador é uma forma de redundância embutida. Os dígitos de dados do código de barras já identificam o produto; o dígito verificador não acrescenta informação nova sobre o item em si. Em vez disso, ele codifica uma relação que deve valer entre todos os dígitos, de modo que, se um leitor ler errado uma barra ou uma pessoa digitar um número errado, a relação se quebra e o erro é detectado de imediato em vez de aceito em silêncio.
O esquema usado pelos códigos de barras de varejo é o módulo 10 da GS1. É deliberadamente simples — algumas multiplicações e uma subtração — porque um leitor de caixa precisa verificá-lo milhares de vezes por dia, de forma instantânea e confiável.
O algoritmo módulo 10 da GS1
Pegue todos os dígitos exceto o dígito verificador final. Começando pelo mais à direita desses dígitos de dados e seguindo para a esquerda, multiplique os dígitos alternando por 3 e por 1. Some todos os produtos. O dígito verificador é o valor que você precisa somar a esse total para chegar ao próximo múltiplo de dez.
Como fórmula: verificador = (10 − (soma ponderada mod 10)) mod 10. O 'mod 10' externo trata o caso em que a soma já é múltipla de dez, o que faz o dígito verificador ser zero.
- Os pesos alternam 3, 1, 3, 1 … começando pelo dígito de dados mais à direita.
- Apenas o último dígito é o verificador; tudo antes dele é dado.
- O mesmo algoritmo é usado para EAN-13, UPC-A e EAN-8 — só muda o comprimento.
Um exemplo resolvido
Pegue os dados EAN-13 400638133393 (doze dígitos; o décimo terceiro será o verificador). Lendo da direita e ponderando 3, 1, 3, 1 …, os produtos são 3×3 + 9×1 + 3×3 + 3×1 + 3×3 + 1×1 + 8×3 + 3×1 + 6×3 + 0×1 + 0×3 + 4×1, que somam 89.
O próximo múltiplo de dez acima de 89 é 90, então o dígito verificador é 90 − 89 = 1. O código de barras completo e válido é 4006381333931. Se um leitor tivesse lido o último dígito como 7, o verificador recalculado não bateria e a leitura seria rejeitada na hora.
Por que ponderar por 3 detecta mais erros
O peso alternado de 3 não é arbitrário. Uma simples soma de dígitos detectaria qualquer dígito errado, mas deixaria passar um erro humano muito comum: trocar dois dígitos adjacentes, como digitar 21 como 12. Multiplicar as posições alternadas por 3 dá pesos diferentes aos vizinhos trocados, de modo que a maioria das trocas muda o total e é detectada.
Nenhum dígito verificador único consegue detectar todos os erros possíveis — o módulo 10 com peso 3 deixa passar as trocas de dois dígitos que diferem em 5 e qualquer par de erros que se cancele. É uma proteção barata e rápida contra os erros mais frequentes, não uma garantia criptográfica.
EAN-13, UPC-A e EAN-8
Os três formatos diferem apenas no comprimento. O EAN-13 tem 12 dígitos de dados mais 1 verificador e é o padrão mundial. O UPC-A, comum na América do Norte, tem 11 dígitos de dados mais 1 verificador — e é, na verdade, um EAN-13 com um zero à esquerda. O EAN-8 comprime 7 dígitos de dados mais 1 verificador num símbolo mais curto para itens pequenos onde um código completo não cabe.
Como compartilham o algoritmo módulo 10, o mesmo cálculo valida os três; você só precisa saber quantos dígitos esperar. Um ISBN de 13 dígitos impresso como código de barras também é um EAN-13 e usa este mesmo dígito verificador, por isso o código de um livro pode ser validado do mesmo jeito que o de uma lata de feijão.