Também disponível em: English · Español · Français · العربية
Verificador do algoritmo de Luhn
Valide uma soma de controlo de Luhn, veja que algarismo os restantes implicam e descubra exactamente que erro ele não consegue ver.
O que é o algoritmo de Luhn
O algoritmo de Luhn é uma soma de controlo: uma regra que transforma os algarismos de um número num algarismo extra no fim, de modo que uma gralha em qualquer parte do número faça o conjunto deixar de bater certo. Está em todos os cartões bancários, no IMEI que identifica um telemóvel e em documentos de identificação de vários países.
A regra é curta. Da direita para a esquerda, duplique um algarismo sim, outro não; se ao duplicar passar de nove, subtraia nove. Some tudo. Se o total for divisível por dez, o número é coerente.
Existe para apanhar erros, não para provar seja o que for. Um formulário de pagamento executa-o antes de submeter para poder dizer «confirme esse número» sem ir e voltar do banco, e um leitor de armazém executa-o para rejeitar de imediato um IMEI mal lido.
Como usar
- Cole um número com espaços ou sem eles. Os espaços e os hífenes são ignorados, portanto um número de cartão copiado em grupos de quatro serve tal e qual. Recusa-se tudo com menos de oito algarismos: uma soma de controlo sobre meia dúzia de algarismos não diz grande coisa, e nenhum identificador real protegido por Luhn é tão curto.
- Leia o veredicto. Quando a soma de controlo falha, a ferramenta diz que algarismo os restantes implicam, o que costuma bastar para ver qual escreveu mal. Quando passa, assinala o que o comprimento sugere, que é uma pista sobre a forma do número e não uma identificação.
- Veja o aviso por baixo. Se o número tiver um 0 ao lado de um 9, diz-lhe onde. É o único sítio onde uma gralha se pode esconder, pela razão explicada mais abaixo.
O que apanha, contado e não citado
O que se costuma dizer é que o Luhn apanha todos os erros de um só algarismo e todas as trocas menos uma. Em vez de o repetir, medimos. Pegando em números válidos de dezasseis algarismos e mudando um algarismo de cada vez, em todas as posições, para todos os outros valores: 2 880 000 alterações testadas, nenhuma escapou. Todo o algarismo mal escrito parte a soma de controlo.
Trocar dois algarismos contíguos é o outro deslize habitual, e aqui o Luhn é quase perfeito mas não de todo. Sobre 351 536 trocas contíguas, passaram 7731: 2,20%. E são um só par de algarismos: o 0 e o 9. Nenhum outro par de vizinhos pode ser trocado sem que a soma de controlo repare.
A razão é o passo de duplicar. O zero duplicado é zero. O nove duplicado é dezoito, que se reduz a nove. Portanto na fronteira entre uma posição duplicada e outra não duplicada, o 0 e o 9 contribuem com o mesmo total em qualquer ordem, e a troca é invisível. Qualquer outro par altera a soma. A ferramenta confronta esta previsão com os noventa pares ordenados de algarismos, portanto a afirmação assenta na aritmética e não apenas na varredura.
Porque o Luhn ganha à outra soma de controlo módulo dez
O ISBN-13, a soma de controlo de todos os livros publicados desde 2007, é também módulo dez. Este sítio mediu-o da mesma maneira e deixa passar cinco pares de algarismos — 0 e 5, 1 e 6, 2 e 7, 3 e 8, 4 e 9 — que representam 10,21% das transposições contíguas. O Luhn deixa passar um par e 2,20%.
Portanto o módulo não é o que os separa. O ISBN-13 pondera os seus algarismos alternando 1 e 3, e isso é linear: trocar vizinhos desloca o total no dobro da diferença entre eles, e qualquer diferença de cinco desaparece módulo dez. O duplicar-e-subtrair-nove do Luhn não é linear, e essa única dobra é o que lhe custa um só par cego em vez de cinco.
É uma bonita ilustração de que a força de uma soma de controlo está na sua ponderação e não no seu módulo, e de que um esquema desenhado em 1954 para máquinas de cartões perfurados se sai melhor nesta medida do que outro adoptado em 2007.
Limites honestos
Uma soma de controlo válida significa que os algarismos são coerentes entre si. Não significa que o número tenha sido emitido, pertença a alguém ou funcione. Números de cartão, IMEI e documentos de identificação são registos na base de dados de alguém, e a única forma de saber se um é real é perguntar a quem a mantém. Qualquer página que diga verificar um cartão sem contactar um emissor está a fazer exactamente o que esta faz: aritmética.
Esta ferramenta também não identifica o emissor. Os primeiros algarismos de um cartão codificam-no, através de um registo mantido pelas redes de pagamento, mas esse registo não é público na íntegra, muda, e uma cópia desactualizada estaria confiantemente errada — a objecção habitual neste sítio a empacotar dados que se movem. A nota do comprimento é uma pista sobre a forma, nada mais.
O Luhn é uma verificação de gralhas e não uma medida de segurança, e nunca pretendeu sê-lo. Impede que um algarismo trocado chegue a um processador de pagamentos; nada faz contra quem consiga correr as mesmas três linhas de aritmética. Todas as suas implementações são públicas, incluindo esta.
Por fim, os números acima vêm de varrer números gerados e não reais, porque a propriedade é aritmética e não depende de que números foram emitidos. O par cego é demonstrável a partir da regra de duplicação, e a página apresenta essa demonstração em vez de se apoiar na amostra.
Porque é grátis
Porque é uma soma e um resto. Não há conjunto de dados, não há nada para descarregar e não há servidor pelo meio: tudo corre no seu navegador e nada do que escreve é enviado, registado ou guardado em lado nenhum.
Esse último ponto importa aqui mais do que na maioria das páginas. Portanto não há conta, nem registo, nem nada guardado atrás de um. O motor e as suas 218 verificações estão no repositório ao lado da página, incluindo as varreduras por trás de cada número citado acima.