O problema que um dígito verificador resolve
Um dígito verificador não é hash nem criptografia, é um checksum: um valor extra, calculado a partir dos dígitos anteriores por uma fórmula pública e reversível, cuja única função é confirmar que aquela sequência de números é internamente consistente. Se a diferença entre esses três conceitos ainda confunde, o guia de hashing, criptografia e encoding fecha isso. O checksum não esconde nada, não protege nada e não prova que o código é autêntico ou que o produto existe: ele só prova que ninguém errou uma tecla ao digitá-lo, ou que o leitor de QR Code e o leitor de código de barras capturaram o número certo.
O gerador de código de barras desta plataforma produz quatro simbologias: Code 128, EAN-13, EAN-8 e UPC-A. As três últimas compartilham a mesma família de checksum, módulo 10 com pesos 1 e 3, o tema central deste guia. O Code 128 é diferente: cada caractere vira um código numérico próprio, e o dígito verificador sai de uma soma ponderada pela posição, módulo 103, então ele fica fora do escopo aqui. Um detalhe que só aparece lendo o código-fonte da ferramenta: o UPC-A não tem uma fórmula própria, ele é gerado prefixando um "0" aos 11 dígitos e reaproveitando a mesma função do EAN-13. Não é um atalho de implementação, é o que a norma real descreve: um UPC-A é, estruturalmente, um EAN-13 cujo primeiro dígito sempre é zero.
- Dígito verificador
- O último dígito de um código, calculado a partir dos anteriores por uma fórmula fixa; existe só para detectar erro, não carrega informação própria sobre o produto ou o livro.
- Checksum
- O resultado dessa conta. "Bater o checksum" significa que o dígito recalculado combina com o dígito impresso no código.
- Simbologia
- O desenho que converte dígitos em barras. EAN-13, UPC-A, EAN-8 e Code 128 são simbologias diferentes; o dígito verificador é matemática, não desenho.
- Módulo (aritmética modular)
- O resto de uma divisão. "Módulo 10" olha o quanto falta para o próximo múltiplo de 10; "módulo 11" olha o resto da divisão por 11, incluindo o caso especial em que ele dá exatamente 10.
- Prefixo GS1
- Os 3 primeiros dígitos de um EAN-13, atribuídos a quem emitiu o código, não ao país onde o produto foi fabricado. 789 e 790 identificam a GS1 Brasil.
EAN-13 e UPC-A: o checksum módulo 10
A conta do EAN-13 e do UPC-A é um checksum ponderado módulo 10, documentado pela própria GS1, a entidade que administra esses códigos no mundo todo. Comece pelo dígito de dado mais à direita, colado ao dígito verificador: ele recebe peso 3. O próximo, à esquerda dele, recebe peso 1. E assim por diante, alternando 3, 1, 3, 1..., até o primeiro dígito de todos, lá na esquerda. Multiplique cada dígito pelo seu peso, some tudo, e o dígito verificador é o número entre 0 e 9 que falta para essa soma alcançar o próximo múltiplo de 10. É exatamente a conta que roda no gerador de código de barras desta plataforma, conferida direto no código-fonte da ferramenta.
S = Σ (dᵢ × wᵢ) → CD = (10 − (S mod 10)) mod 10- dᵢ
- o i-ésimo dígito de dado (os 12 primeiros do EAN-13, ou os 11 do UPC-A)
- wᵢ
- o peso daquela posição: 3 no dígito mais próximo do verificador, alternando para 1
- S
- a soma de todos os produtos dígito × peso
- CD
- o dígito verificador, sempre entre 0 e 9
| Posição | Dígito | Peso | Produto |
|---|---|---|---|
| 1ª | 7 | 1 | 7 |
| 2ª | 8 | 3 | 24 |
| 3ª | 9 | 1 | 9 |
| 4ª | 2 | 3 | 6 |
| 5ª | 4 | 1 | 4 |
| 6ª | 5 | 3 | 15 |
| 7ª | 1 | 1 | 1 |
| 8ª | 0 | 3 | 0 |
| 9ª | 8 | 1 | 8 |
| 10ª | 8 | 3 | 24 |
| 11ª | 6 | 1 | 6 |
| 12ª | 3 | 3 | 9 |
A soma dos doze produtos dá 113. O próximo múltiplo de 10 acima de 113 é 120; 120 menos 113 é 7. O dígito verificador é 7, e o EAN-13 completo fica 7892451088637. Repare no prefixo 789: segundo a GS1 Brasil, ele (junto com o 790) identifica códigos emitidos por ela, não indica que o produto foi fabricado no Brasil, as duas coisas se confundem com frequência.
O UPC-A segue a mesma conta sobre 11 dígitos de dados, um a menos que o EAN-13. Um exemplo rápido: 03600029145. Com só 11 posições, a alternância de pesos já cai em 3 na primeira posição da esquerda (o dígito mais à direita continua com peso 3, a contagem só sobe a partir dali). A soma dá 58; o próximo múltiplo de 10 é 60; o dígito verificador é 2, fechando em 036000291452. É por isso que, no gerador de código de barras, gerar um UPC-A e um EAN-13 usa exatamente o mesmo motor por baixo, confirmado no código-fonte: o UPC-A ganha um zero na frente, vira um EAN-13 de 12 dígitos, e a mesma função calcula o dígito verificador dos dois.
ISBN-10: o checksum módulo 11 e a letra X
O ISBN nasceu separado do código de barras de varejo. O sistema começou no Reino Unido em 1967 e chegou aos Estados Unidos em 1968, pela R. R. Bowker. Por décadas, um ISBN teve 10 dígitos, 9 de dado mais 1 verificador, mas a conta por trás é diferente da do EAN-13. Em vez de módulo 10, o ISBN-10 usa módulo 11, e a escolha não é estética: 11 é primo, o que muda o que o dígito consegue provar, ponto ao qual voltamos na última seção. Os pesos também mudam: decrescem de 10 até 2 ao longo dos 9 dígitos de dado, da esquerda para a direita. O dígito verificador é o valor entre 0 e 10 que faz a soma de todos os produtos ser múltiplo de 11; quando esse valor dá exatamente 10, ele não cabe num único algarismo, então o padrão usa a letra X no lugar, a única posição de um ISBN-10 que pode ser uma letra.
S = Σ (dᵢ × pᵢ) → r = S mod 11 → DV = (11 − r) mod 11- dᵢ
- o i-ésimo dos 9 dígitos de dado
- pᵢ
- o peso daquela posição, decrescente de 10 a 2, da esquerda para a direita
- r
- o resto da soma dividida por 11
- DV
- o dígito verificador; vira a letra X quando o resultado é 10
| Posição | Dígito | Peso | Produto |
|---|---|---|---|
| 1ª | 6 | 10 | 60 |
| 2ª | 5 | 9 | 45 |
| 3ª | 4 | 8 | 32 |
| 4ª | 7 | 7 | 49 |
| 5ª | 8 | 6 | 48 |
| 6ª | 2 | 5 | 10 |
| 7ª | 1 | 4 | 4 |
| 8ª | 9 | 3 | 27 |
| 9ª | 3 | 2 | 6 |
A soma dos nove produtos dá 281. O resto de 281 dividido por 11 é 6 (281 = 25×11 + 6). O dígito verificador é 11 menos esse resto, 5. O ISBN-10 completo fica 6547821935. Um segundo exemplo mostra a letra X na prática: para a base 650114924, a soma ponderada dá 188, e o resto de 188 dividido por 11 é 1 (188 = 17×11 + 1). Onze menos um é dez, e dez não cabe num dígito, então o ISBN-10 fecha como 650114924X. Sistemas de cadastro que rejeitam ISBNs terminados em X estão, eles mesmos, com o bug: a letra é parte legítima do padrão, não um erro de digitação.
A fusão com o EAN-13: a transição de 2007
- 1949–1952A patente do conceito
Norman Woodland e Bernard Silver pedem a patente de um sistema de classificação por padrões em 1949; ela é concedida em 7 de outubro de 1952, como a patente americana nº 2.612.994. Os dois venderam os direitos por 15 mil dólares, todo o retorno financeiro direto que tiveram com a invenção.
- 1967–1968O ISBN nasce, separado do varejo
O sistema de numeração de livros começa no Reino Unido em 1967 e chega aos Estados Unidos em 1968 pela R. R. Bowker. Nasce como um identificador de 10 dígitos, com sua própria conta de verificação, sem relação com os códigos de barras que viriam a dominar o varejo.
- 3 de abril de 1973O varejo dos EUA escolhe o símbolo UPC
Representantes da indústria de supermercados dos EUA adotam o desenho retangular do Código Universal de Produto (UPC) como padrão, encerrando anos de propostas concorrentes.
- 26 de junho de 1974A primeira leitura comercial
Um pacote de dez unidades de chiclete Juicy Fruit, da Wrigley, é o primeiro produto do mundo lido por um leitor de código de barras, num supermercado Marsh em Troy, Ohio. O produto foi escolhido de propósito: ninguém tinha certeza de que um código caberia numa embalagem tão pequena.
- 1º de janeiro de 2007O ISBN vira um EAN-13
Pela regra da Agência Internacional de ISBN, todo ISBN novo passa a ter 13 dígitos, prefixado por 978 (ou 979, criado depois), e usa exatamente o mesmo algoritmo módulo 10 do código de barras de varejo.
A conversão de ISBN-10 para ISBN-13 não reaproveita o dígito verificador antigo, ela descarta e recalcula do zero. Pegue os 9 dígitos de dado do ISBN-10 (sem o dígito verificador), acrescente o prefixo 978, formando 12 dígitos, e aplique a mesma conta módulo 10 do EAN-13 da seção anterior. O resultado é um número novo, com um dígito verificador novo, representando o mesmo livro.
| Formato | Número completo | Dígitos de dado | Algoritmo |
|---|---|---|---|
| ISBN-10 | 6547821935 | 654782193 (9 dígitos) | módulo 11, pesos 10 a 2 |
| ISBN-13 | 9786547821933 | 978654782193 (12 dígitos) | módulo 10, pesos 1 e 3 (igual ao EAN-13) |
Repare: é o mesmo livro, os mesmos 9 dígitos centrais (654782193), mas dois dígitos verificadores diferentes, 5 no ISBN-10 e 3 no ISBN-13, porque são duas contas diferentes. A vantagem prática do formato novo é que ele imprime como um EAN-13 de verdade: qualquer leitor de código de barras de loja, sem lógica especial para livros, já sabe lê-lo. No Brasil, quem administra o ISBN é a Câmara Brasileira do Livro (CBL) desde 2020; antes, era a Fundação Biblioteca Nacional. O prefixo de país dentro do ISBN também mudou: o 85 identificava o Brasil desde a adoção do sistema, mas se esgotou, e a Agência Internacional de ISBN liberou o 65 como prefixo brasileiro adicional a partir de 2018. ISBNs antigos com 85 continuam válidos, o prefixo novo só vale para registros novos. A consulta de ISBN desta plataforma aceita tanto o formato de 10 quanto o de 13 dígitos e busca os metadados do livro via BrasilAPI, mas ela não recalcula o dígito verificador antes de consultar, então vale conferir a conta você mesmo antes de reportar um ISBN como "quebrado".
O que o dígito verificador realmente pega (e o que não pega)
Um dígito verificador existe para um propósito estreito: pegar um erro de digitação ou de leitura antes que ele vire um pedido errado ou uma busca sem resultado. O guia de validação de CPF e CNPJ mostra esse mesmo princípio aplicado a documentos brasileiros, também um checksum módulo 11, e vale a mesma ressalva aqui: um código "válido" prova que a aritmética fecha, não que o produto existe no catálogo do fabricante ou que aquele ISBN corresponde a um livro publicado de verdade. Mas as duas famílias de checksum deste guia não pegam os mesmos erros com a mesma eficácia, e a diferença é matemática, não capricho de norma.
EAN-13 / UPC-A (módulo 10)
- Pega 100% das trocas de um único dígito.
- Pega a maioria das transposições de dígitos vizinhos.
- NÃO pega a troca de dois dígitos vizinhos quando eles diferem exatamente em 5 (0↔5, 1↔6, 2↔7, 3↔8, 4↔9).
ISBN-10 (módulo 11)
- Pega 100% das trocas de um único dígito.
- Pega 100% das transposições, vizinhas ou não, porque 11 é primo e todos os pesos são distintos.
- Custo: o dígito verificador às vezes precisa ser a letra X.
| Cenário | O que muda | Resultado |
|---|---|---|
| Erro de digitação | posição 5: 4 vira 9 → 789295108863 | checksum recalcula para 2, não bate com o 7 original: PEGO |
| Transposição comum | posições 3 e 4 trocam (9,2 → 2,9) → 782945108863 | checksum recalcula para 3, não bate com o 7: PEGO |
| Transposição de dígitos que diferem em 5 | 789275108863 (2,7) vira 789725108863 (7,2) | os dois dão checksum 4: NÃO PEGO |
| A mesma troca, agora num ISBN-10 | 652278193 (2,7) vira 652728193 (7,2) | dá X num caso e 5 no outro: PEGO |
A explicação é álgebra simples. Trocar dois dígitos vizinhos muda a soma pela diferença entre os dois pesos (2, já que os pesos alternam entre 1 e 3) multiplicada pela diferença entre os dois dígitos. Quando essa diferença de dígitos é 5, o resultado é 2 × 5 = 10, e módulo 10 isso simplesmente some: a soma final não muda. No ISBN-10, a diferença entre pesos vizinhos é sempre 1 (10, 9, 8...), então essa mesma conta nunca some módulo 11, e é por isso que ele pega toda transposição, não só a maioria. A demonstração completa dessa prova está num material de engenharia da Universidade de New Brunswick, citado nas fontes, para quem quiser a álgebra linha a linha.
Perguntas frequentes
Como o dígito verificador do EAN-13 é calculado?
Por que às vezes o ISBN termina em X?
O ISBN-10 e o ISBN-13 do mesmo livro têm o mesmo dígito verificador?
Um código com dígito verificador correto garante que o produto ou livro é real?
O dígito verificador do EAN-13 pega qualquer erro de digitação?
Que formatos de código de barras o gerador desta plataforma produz?
O último dígito de um EAN-13, UPC-A ou ISBN nunca é escolhido, é sempre calculado. EAN-13 e UPC-A somam os dígitos anteriores com pesos alternados 1 e 3, peso 3 sempre no dígito mais próximo do verificador, e fecham em módulo 10. O ISBN-10 soma com pesos decrescentes de 10 a 2 e fecha em módulo 11, o que às vezes vira a letra X, uma conta mais rigorosa que pega toda transposição, não só a maioria. Desde 1º de janeiro de 2007 o próprio ISBN passou a usar a fórmula do EAN-13, com prefixo 978 ou 979. Entenda as duas fórmulas e você consegue, com papel e caneta, distinguir um código com erro de digitação de um código genuíno, exatamente o que o gerador de código de barras e a consulta de ISBN desta plataforma fazem em milissegundos.
Fontes e referências
- GS1, Como calcular um dígito verificador manualmente
- Agência Internacional de ISBN, O que é um ISBN?
- American Library Association, Fact Sheet 28: Sistemas ISBN e ISSN
- Tervo, R. (Universidade de New Brunswick), Secrets of the ISBN: An Error Detection Method
- Google Patents, US2612994A, Classifying apparatus and method
- National Inventors Hall of Fame, Bernard Silver
- Marketplace, The inventors of the now-ubiquitous barcode received a patent 70 years ago
- GS1, Linha do tempo histórica
- Smithsonian Magazine, The History of the Bar Code
- GS1 Brasil, Tipos de códigos de barras
- Câmara Brasileira do Livro, Numeração do ISBN passa por mudanças no Brasil