Dígito verificador EAN UPC é a última posição de praticamente todo número que aparece embaixo de um código de barras. Ele existe por um motivo muito concreto: leitura óptica erra, e um erro silencioso em um número de produto se propaga para estoque, preço e logística. A conta que produz esse dígito é simples, e entendê-la resolve tanto a conferência manual quanto a implementação no sistema.
O que é o dígito verificador de um código de barras?
Os números de identificação de produtos, conhecidos pelas famílias EAN e UPC, terminam com um dígito calculado a partir dos demais. Ele não faz parte da identificação do produto: é um resumo aritmético das posições anteriores, colocado ali para permitir que o leitor detecte uma leitura inconsistente.
O funcionamento é o mesmo esqueleto descrito no panorama de algoritmos de dígito verificador: uma soma ponderada dos algarismos, uma divisão por um módulo e um resultado final derivado do resto. A diferença em relação a outros esquemas está nos detalhes — os pesos e a forma de transformar o resto.
Como o dígito é calculado, e não atribuído, ele pode ser conferido por qualquer sistema. Não é preciso consultar cadastro nem banco de dados de produtos para saber se a sequência fecha. Essa característica é o que torna a verificação barata o suficiente para rodar em cada leitura de scanner.
Pesos alternados: por que a posição importa
O traço que define essa família é o uso de pesos que se alternam ao longo da sequência. Posições pares recebem um peso, posições ímpares recebem outro, e a soma final mistura as duas contribuições.
Essa alternância tem um efeito prático importante: ela torna a conta sensível à posição de cada algarismo. Se dois algarismos vizinhos trocam de lugar, as contribuições mudam de peso e a soma deixa de fechar. Esquemas com pesos iguais em todas as posições não teriam essa proteção — é justamente por isso que a alternância aparece em numerações lidas por máquina, onde a troca de dois caracteres vizinhos é um erro comum.
| Situação | Efeito na soma | Resultado da conferência |
|---|---|---|
| Um algarismo lido errado | Muda a contribuição daquela posição | Reprova |
| Dois vizinhos trocados | Muda o peso de ambos | Reprova |
| Dígito final lido errado | A soma permanece, a comparação não fecha | Reprova |
A tabela resume o objetivo do esquema: transformar erros de leitura em uma inconsistência detectável antes que o número siga adiante no sistema.
Como o complemento fecha a conta
Depois de somar as contribuições ponderadas, o valor é reduzido por um módulo pequeno. O que interessa não é a soma bruta, mas a distância entre ela e o próximo múltiplo do módulo — o complemento. Esse complemento, ajustado para caber em um único algarismo, é o dígito verificador.
Entender o complemento explica um comportamento que costuma confundir quem confere à mão: o dígito final não cresce junto com a soma. Ele dá a volta quando a soma cruza um múltiplo do módulo. Duas sequências com somas bem diferentes podem terminar no mesmo algarismo.
Não é preciso memorizar pesos nem constantes para conferir um número isolado. Basta lembrar a forma da conta — somar com pesos alternados, reduzir pelo módulo, tomar o complemento — e deixar o cálculo para a máquina. Detalhes numéricos copiados de memória são a principal fonte de conferências erradas.
Na implementação, a mesma conta admite duas escritas equivalentes: somar os produtos e obter o complemento no fim, ou calcular o complemento posição a posição. As duas chegam ao mesmo algarismo, e escolher entre elas é questão de clareza, não de correção. Vale documentar a variante adotada, porque um relatório de erro cita o resultado da conta e alguém vai precisar reproduzi-lo meses depois.
O prefixo do código indica o país de origem?
Não. Os primeiros algarismos de um número de produto correspondem a uma faixa de numeração atribuída por quem administra o sistema, e essa faixa é frequentemente confundida com a origem do produto.
A confusão é compreensível, porque as faixas são organizadas por áreas geográficas de administração. Mas faixa de numeração e local de fabricação são coisas distintas: uma empresa sediada em uma região pode produzir em outra, e o número continua sendo o mesmo. Nada no código informa onde o item foi feito, de quem é a marca ou em que país ele foi embalado.
Vale a mesma cautela para a leitura de qualquer conclusão tirada do prefixo. Ele ajuda a identificar qual autoridade administra a faixa, e nada além disso. Quando o cadastro do item informa a origem, ele é a fonte; o número não é. Confundir os dois leva a conclusões erradas sobre fabricação e procedência, que o código simplesmente não carrega.
O que acontece quando o scanner lê errado?
Um leitor óptico pode devolver uma sequência com um algarismo trocado, com dois caracteres na ordem inversa ou com o dígito final alterado. Em todos esses casos, a conferência reprova, e é isso que se espera.
Existe, porém, uma situação menos intuitiva: a leitura pode produzir uma sequência diferente que, por coincidência, também fecha a conta. Nenhum esquema de dígito verificador elimina essa possibilidade por completo, porque a conta resume muitos algarismos em um só. O que ela faz é reduzir drasticamente a chance de um erro passar despercebido.
Por isso, em fluxos de alto volume, a conferência do dígito é o primeiro filtro, não o único. Conferir também comprimento, conjunto de caracteres e, quando possível, o cadastro do item é o que fecha o processo.
Para quem desenvolve: conferir antes de gravar
A verificação do dígito é barata e cabe em qualquer ponto do fluxo. O lugar mais útil costuma ser a entrada de dados — no recebimento, na importação de arquivos e antes de gravar em estoque —, porque detectar o problema ali evita que ele contamine relatórios depois.
Pontos que costumam dar trabalho:
- Tratar a sequência como texto. Números de produto podem começar com zero e têm comprimento fixo; converter para inteiro destrói as duas propriedades.
- Normalizar espaços e hífen antes de conferir, mas guardar o valor original para poder mostrar o que foi lido.
- Manter os pesos e o módulo como parâmetros nomeados, e não espalhados em expressões.
- Recusar entradas vazias ou com comprimento fora do esperado antes de tentar a conta, com mensagem própria.
- Diferenciar, na resposta, o dígito que não confere da sequência que não é reconhecida.
- Conferir também os códigos gerados internamente, e não apenas os recebidos: uma etiqueta impressa com erro se propaga para todo o estoque.
Todos os códigos mencionados neste texto são fictícios e servem apenas para explicar a conta. Passar na verificação não indica que o produto exista, que a embalagem seja autêntica ou que o número esteja atribuído a algum fabricante.
Próximos passos
Se o número que você precisa conferir é de livro ou de publicação periódica, o texto sobre dígito verificador ISBN ISSN trata desse caso e das diferenças em relação a este. Para comparar esta família com as demais, releia o panorama de algoritmos de dígito verificador. E para conferir uma sequência agora, use a ferramenta de validação de número.