O algoritmo Luhn e a validação de cartões de crédito
Entenda como o algoritmo Luhn valida números de cartão de crédito, como calculá-lo manualmente e por que ele não garante que o cartão seja válido.
O algoritmo de Luhn, também conhecido como "fórmula de módulo 10" ou "mod 10", é um algoritmo simples de checksum criado por Hans Peter Luhn em 1954, quando trabalhava na IBM. Seu objetivo original era verificar a integridade de números de identificação — hoje é o padrão adotado por praticamente todos os cartões de crédito do mundo.
Como o algoritmo funciona
O algoritmo percorre os dígitos do número da direita para a esquerda, dobrando o valor de cada segundo dígito. Se o resultado for maior que 9, subtrai-se 9. Por fim, todos os valores são somados. Se o total for divisível por 10, o número é válido.
- Comece pelo último dígito (dígito verificador) e vá para a esquerda
- Dobre o valor de cada segundo dígito (posições ímpares da direita)
- Se o dígito dobrado for maior que 9, subtraia 9
- Some todos os dígitos
- Se a soma for divisível por 10, o número é válido (Luhn)
Número: 4 5 3 9 1 4 8 8 0 3 4 3 6 4 6 7
Posição:→ dobrar dobrar dobrar dobrar dobrar dobrar dobrar dobrar
Após: 4 10 3 18 1 8 8 16 0 6 4 6 6 8 6 14
Subtrai 9 se >9: 4 1 3 9 1 8 8 7 0 6 4 6 6 8 6 5
Soma: 4+1+3+9+1+8+8+7+0+6+4+6+6+8+6+5 = 82
82 mod 10 = 2 (inválido)O que Luhn valida e o que não valida
Luhn é uma verificação de integridade — ele detecta erros de digitação simples, como um dígito errado ou dois dígitos trocados de posição. Ele não verifica se o cartão existe, se tem saldo, se está ativo, ou se pertence a quem o apresentou. Essas verificações são feitas pelas redes de pagamento (Visa, Mastercard, etc.) em tempo real.
Onde mais o algoritmo Luhn é usado
- Números IMEI de celulares
- Números de previdência social canadenses (SIN)
- Números de identificação de provedores de saúde nos EUA (NPI)
- Códigos de barras em alguns padrões
- Números de série de produtos de várias fabricantes
Gerando dados de teste com cartões Luhn-válidos
Em desenvolvimento e testes de sistemas de pagamento, é comum precisar de números de cartão que passem na validação do frontend sem usar dados reais. As redes de pagamento definem prefixos reservados para testes: Visa usa 4111111111111111, Mastercard usa 5500005555555559, entre outros. Todos passam no algoritmo Luhn e nunca processam transações reais.
Use o Gerador de Cartão de Crédito do UtilDev para gerar números Luhn-válidos por bandeira para seus testes de integração. O Validador de Cartão permite verificar qualquer número contra o algoritmo e identificar a bandeira pelo prefixo.