Como funciona o algoritmo de Luhn: validação de cartão de crédito explicada
Todo número de cartão de crédito — Visa, Mastercard, Elo, American Express — é validado por um algoritmo inventado em 1954 por Hans Peter Luhn, cientista da IBM. O algoritmo de Luhn (também chamado de mod-10) é um checksum simples que detecta erros de digitação. É usado por gateways de pagamento, formulários de checkout e geradores de cartão de teste.
O algoritmo passo a passo
Dado um número de cartão (ex: 4532015112830366):
- Comece pelo último dígito e vá da direita para a esquerda
- Dobre cada segundo dígito (posições ímpares contando da direita)
- Se o resultado da dobra for maior que 9, subtraia 9
- Some todos os dígitos
- Se o total for divisível por 10, o número é válido
Exemplo visual
Implementação em JavaScript
Identificando a bandeira pelo prefixo
Além do checksum, o primeiro dígito (ou primeiros dígitos) identifica a bandeira:
- Visa: começa com 4 (16 dígitos)
- Mastercard: começa com 5 (51-55) ou 2 (2221-2720)
- Elo: prefixos específicos como 636368, 438935, 504175
- American Express: começa com 34 ou 37 (15 dígitos)
Um gerador de cartão de teste cria números com o prefixo correto da bandeira e calcula o último dígito para que passe no Luhn.
Gere cartões de teste
Use o gerador abaixo para criar números válidos (Luhn + prefixo correto):
Clique em Gerar para começar
Luhn não é segurança
É importante entender que o Luhn é apenas um checksum para detectar erros de digitação — não é criptografia e não garante que o cartão existe ou tem saldo. Gateways de pagamento fazem validações adicionais (BIN lookup, verificação com o emissor, 3D Secure) antes de autorizar uma transação.
Por isso, cartões gerados passam na validação de formulário mas são recusados por qualquer gateway real. São úteis exclusivamente para testar a camada de validação do seu frontend.
Resumo
- O algoritmo de Luhn valida números de cartão com um checksum mod-10
- É simples de implementar (~15 linhas de código) e não requer libs externas
- O prefixo identifica a bandeira (4=Visa, 5=Mastercard, etc.)
- Cartões gerados passam no Luhn mas não funcionam para compras reais
- Use o gerador de cartão para testes de formulário
- Use a API para gerar em massa no CI/CD