Validar ISBN: dois padrões, dois algoritmos completamente diferentes
ISBN não é um formato único — é, na prática, dois padrões que coexistem: ISBN-10 (o formato original, usado até 2007) e ISBN-13 (o padrão atual, compatível com o sistema de código de barras EAN/GS1 usado no varejo mundial). Os dois identificam livros, mas usam algoritmos de dígito verificador completamente diferentes — um validador que aplica a mesma fórmula para os dois formatos está, necessariamente, errado para um deles.
ISBN-10: Módulo 11 com a letra X como dígito 10
O ISBN-10 tem 10 caracteres. Cada um dos 9 primeiros dígitos é
multiplicado por um peso decrescente de 10 a 2 (o primeiro dígito por
10, o segundo por 9, e assim até o nono por 2); o décimo caractere —
o dígito verificador — é multiplicado por peso 1. A soma total precisa
ser múltiplo de 11. Como o dígito verificador pode assumir o valor 10
(que não cabe em um único algarismo decimal), ele é representado pela
letra X quando isso acontece — a mesma convenção já
documentada na página do gerador de RG para o
padrão SSP-SP.
ISBN-13: o mesmo algoritmo do EAN-13 do varejo
O ISBN-13 abandona o Módulo 11 inteiramente e usa exatamente o mesmo algoritmo do código de barras EAN-13, já documentado na página do gerador de Código de Barras: pesos alternados 1 e 3 aplicados aos 12 primeiros dígitos, soma total precisando ser múltiplo de 10. Essa não é uma coincidência de design — o ISBN-13 foi criado especificamente para que um livro pudesse ser escaneado pelo mesmo leitor de código de barras usado para qualquer outro produto de varejo, sem precisar de um algoritmo de checksum separado só para livros.
Por que um validador precisa decidir qual algoritmo usar, e como
A decisão de qual dos dois algoritmos aplicar é feita, mais
frequentemente, pelo comprimento da entrada (10 ou 13
caracteres) — mas um validador cuidadoso também trata o caso de um
ISBN-13 que começa com o prefixo 978 ou 979
(os únicos prefixos usados para converter um ISBN-10 em ISBN-13),
já que os dois formatos podem representar o mesmo livro fisicamente
impresso, mas nunca compartilham o mesmo dígito verificador
diretamente — a conversão entre um e outro não é uma simples adição de
dígitos, exige recalcular o checksum do zero no formato de destino.