Todo número de cartão de crédito ou débito passa por uma pequena conta antes de qualquer consulta ao banco: o algoritmo de Luhn. Criado em 1954 pelo engenheiro Hans Peter Luhn, ele é hoje a checagem de formato mais difundida do comércio eletrônico, além de aparecer em outros números, como o IMEI de celulares. Este guia mostra o passo a passo com um exemplo calculado, o que o algoritmo consegue detectar e onde ele deixa de ajudar.
A estrutura de um número de cartão
Um número de cartão costuma ter de 13 a 19 dígitos e é dividido em três partes. O primeiro dígito identifica o setor do emissor. Os primeiros seis a oito dígitos formam o identificador do emissor (o "BIN" ou "IIN"), que indica a bandeira e o banco. O restante, exceto o último dígito, é o número da conta. O último dígito é o dígito verificador, calculado pelo algoritmo de Luhn sobre todos os anteriores.
Como validar um número, passo a passo
Tomemos o número de exemplo 79927398713, muito usado em
materiais didáticos. O procedimento é:
- Comece pelo dígito da direita (o dígito verificador) e ande para a esquerda.
- Mantenha o primeiro dígito como está, dobre o segundo, mantenha o terceiro, dobre o quarto, e assim por diante, alternando.
- Se dobrar um dígito resultar em um valor maior que 9, subtraia 9 (é o mesmo que somar os dois algarismos do resultado).
- Some todos os valores obtidos.
- Se a soma for divisível por 10, o número é válido.
Aplicando ao exemplo, lendo da direita para a esquerda:
dígito: 3 1 7 8 9 3 7 2 9 9 7
dobrar? não sim não sim não sim não sim não sim não
valor: 3 2 7 16 9 6 7 4 9 18 7
ajustado: 3 2 7 7 9 6 7 4 9 9 7
soma = 3+2+7+7+9+6+7+4+9+9+7 = 70
70 mod 10 = 0 → número válido
Como calcular o dígito verificador
Para gerar um número válido, o processo é o mesmo, mas começa
sem o dígito final. Tome os dígitos de base 7992739871 e
percorra-os da direita para a esquerda, dobrando agora o primeiro
(porque o dígito verificador, que ainda será acrescentado, ocupará a
posição não dobrada):
dobrados: 1→2, 8→7 (16−9), 3→6, 2→4, 9→9 (18−9) soma = 28
não dobrados: 7 + 9 + 7 + 9 + 7 soma = 39
total = 67
dígito verificador = (10 − 67 mod 10) mod 10 = 3
O número completo é 79927398713, exatamente o que validamos
acima. O
gerador de cartão de crédito de teste
aplica esse mesmo cálculo para produzir números que passam na validação,
e o
validador de cartão executa
a conferência do seu lado.
Por que dobrar dígitos alternados?
A ideia do algoritmo é combinar simplicidade com boa cobertura de erros. Se todos os dígitos tivessem o mesmo peso, trocar dois dígitos vizinhos não mudaria a soma e o erro passaria despercebido. Dobrar as posições alternadas faz com que uma troca de dígitos vizinhos, em quase todos os casos, altere o total. A regra de subtrair 9 quando o dobro passa de 9 mantém o valor dentro de um único algarismo.
O que o algoritmo detecta
- Qualquer erro em um único dígito (digitou 4 em vez de 5).
- A maioria das trocas de dois dígitos vizinhos, com uma exceção conhecida: a troca de
09por90não é detectada. - Boa parte dos erros de digitação e de leitura em geral, o que basta para o objetivo original: evitar transações com números digitados errado.
O que ele não faz
- Não prova que o cartão existe. Um número que passa em Luhn pode nunca ter sido emitido. A conta acerta por acaso uma vez a cada dez tentativas.
- Não verifica limite, validade, titular nem código de segurança. Isso só o emissor confirma, na autorização da transação.
- Não é segurança. A conta é pública e qualquer um gera números "válidos". Por isso o número, sozinho, nunca autentica ninguém.
Uso prático em testes
Números de teste como 4111 1111 1111 1111 são amplamente
usados na documentação de gateways de pagamento justamente porque passam
na verificação de Luhn (a soma dá 30) sem pertencer a nenhum cliente. Em
ambientes de homologação, use os cartões de teste do próprio provedor;
e nunca use um número real para testar. Para o quadro geral de como
documentos brasileiros e internacionais usam dígitos verificadores,
leia Dígito verificador: o que é e o que ele não prova.