1001Ferramentas
💳 Validadores

Como validar um cartão de crédito com o algoritmo de Luhn

O que o algoritmo de Luhn verifica (e o que não verifica), o cálculo passo a passo, a identificação da bandeira pelo BIN e a fronteira ética dos números de teste.

Atualizado em 30 de junho de 2026 · 7 min de leitura

O que o algoritmo de Luhn verifica (e o que não verifica)

O algoritmo de Luhn, também chamado de "fórmula módulo 10", foi criado em 1954 por Hans Peter Luhn, um engenheiro da IBM. Ele é um dígito verificador: uma conta simples que detecta erros de digitação antes que o número saia do seu formulário. Praticamente todas as bandeiras de cartão (Visa, Mastercard, Amex, Elo, Hipercard) seguem essa regra, padronizada pela norma ISO/IEC 7812.

O ponto que mais gera confusão é o que o Luhn não faz. Ele não consulta nenhum banco, não diz se o cartão existe, se está ativo, se tem saldo ou a quem pertence. Um número pode passar perfeitamente no Luhn e ser puro inventado. O que o teste garante é apenas isto: a sequência é internamente consistente.

Pense no Luhn como o corretor ortográfico do número do cartão. Ele pega quase 100% dos erros de um único dígito trocado e a maioria das trocas de dígitos vizinhos (digitar "21" em vez de "12"). Mas "está escrito corretamente" é bem diferente de "esse cartão é real e tem limite" — isso só a operadora confirma.

Por isso o Luhn é a primeira camada de validação, não a última. No checkout, ele descarta de imediato um número digitado errado, poupando uma ida desnecessária ao gateway de pagamento. Quem quer só conferir essa consistência sem escrever código pode colar o número no Validador de Número de Cartão de Crédito e ver o resultado na hora.

O cálculo de Luhn passo a passo

A receita tem quatro passos. Vamos aplicá-la a um número de teste válido: 4539 1488 0343 6467.

  1. Comece pelo dígito mais à direita (o próprio dígito verificador) e caminhe para a esquerda.
  2. Dobre o valor de cada segundo dígito — ou seja, o 2º, o 4º, o 6º, contando a partir da direita.
  3. Se a multiplicação passar de 9, subtraia 9 (o que é o mesmo que somar os dois algarismos: 16 vira 1+6 = 7).
  4. Some todos os dígitos resultantes. Se o total terminar em zero (total ÷ 10 sem resto), o número é válido.

No nosso número, os dígitos que ocupam as posições pares a partir da direita são 4, 3, 1, 8, 0, 4, 6 e 6. Cada um é dobrado e, se passar de 9, reduzido:

Dígito original× 2Reduzido (−9 se > 9)
488
366
122
8167
000
488
6123
6123

A soma dos dígitos dobrados é 8 + 6 + 2 + 7 + 0 + 8 + 3 + 3 = 37. Agora some os dígitos que não foram dobrados (as posições ímpares a partir da direita): 7 + 4 + 3 + 3 + 8 + 4 + 9 + 5 = 43.

Total geral: 37 + 43 = 80. Como 80 termina em zero, o número passa no teste de Luhn. Se trocássemos um único dígito — digamos, 4539 1488 0343 6467 → 4539 1488 0343 6567 — a soma viraria 81, não divisível por 10, e o número seria rejeitado na mesma hora.

Um detalhe que confunde: conte sempre da direita

Por que dobrar a partir da direita, e não da esquerda? Porque o comprimento dos cartões varia — Visa e Mastercard têm 16 dígitos, American Express tem 15, Diners tem 14. Ancorar a contagem no dígito verificador (sempre o último) faz a regra valer para qualquer comprimento. Se você dobrasse a partir da esquerda, um número de 15 dígitos dobraria os algarismos errados.

Como identificar a bandeira pelo BIN/IIN

Os primeiros dígitos do cartão não são aleatórios. Eles formam o IIN (Issuer Identification Number), historicamente chamado de BIN (Bank Identification Number). Pela ISO/IEC 7812, o primeiro dígito é o MII (Major Industry Identifier): 4 e 5 são instituições financeiras, 3 é viagem e entretenimento (onde mora a Amex), 6 é varejo e bancos.

Os primeiros 6 a 8 dígitos identificam a bandeira e o emissor. Os intervalos mais comuns:

BandeiraInícioDígitos
Visa416 (alguns 13 ou 19)
Mastercard51–55 e 2221–272016
American Express34 e 3715
Elo4011, 4312, 5066, 6362…16
Hipercard60628216
Diners Club300–305, 36, 3814

É por isso que um formulário de checkout consegue mostrar o logo da bandeira certa enquanto você ainda digita: ele lê os primeiros dígitos e cruza com essas faixas. O dígito verificador de Luhn e a identificação por BIN são checagens independentes — uma confere a consistência, a outra diz quem emitiu.

Números de teste vs números reais: a fronteira legal e ética

Como o Luhn é uma fórmula pública e determinística, é trivial gerar números que passam no teste. Operadoras e gateways de pagamento (Stripe, PagSeguro, Cielo) publicam números de teste exatamente para isso: 4242 4242 4242 4242, por exemplo, é um número Visa de teste clássico que passa no Luhn (a soma dá 80) e nunca corresponde a um cartão real.

Esses números servem para desenvolvimento e QA: validar a lógica do formulário, testar o fluxo de erro, conferir a integração com o gateway no ambiente sandbox. Um Gerador de Número de Cartão de Crédito produz sequências sintéticas e válidas-pelo-Luhn justamente para alimentar esses testes.

A fronteira é clara: gerar números para testar o seu próprio código é normal; usá-los para tentar uma compra, fraudar um cadastro ou burlar um período de teste gratuito é fraude — crime de estelionato no Brasil (art. 171 do Código Penal). O gerador não cria saldo, não corresponde a uma conta e jamais autoriza uma transação real. Estas informações têm caráter educativo.

Onde a validação de Luhn aparece em formulários e checkout

Na prática, o Luhn vive no front-end. Assim que o campo do cartão perde o foco, um trecho de JavaScript roda a fórmula e, se ela falhar, mostra "número inválido" sem nem tocar no servidor. É uma validação barata que melhora a experiência: o cliente corrige o erro de digitação na hora, em vez de esperar a recusa do gateway alguns segundos depois.

O fluxo completo de um checkout costuma ser:

  • Formato e Luhn — o número tem o tamanho certo e passa no módulo 10? Se não, erro imediato no navegador.
  • BIN — os primeiros dígitos batem com uma bandeira aceita pela loja? Mostra o logo e ajusta a máscara (Amex tem 15 dígitos e CVV de 4).
  • Autorização — só então os dados criptografados vão ao gateway, que pergunta ao emissor se a transação é aprovada. É aqui, e só aqui, que se sabe se o cartão é real e tem limite.

Repare como o Luhn ocupa o primeiro degrau e nada além disso. Ele é um filtro de erro de digitação, não uma prova de autenticidade. Para conferir rapidamente se um número está bem formado, o Validador de Número de Cartão de Crédito aplica exatamente esse primeiro degrau e ainda aponta a bandeira pelo BIN.

Perguntas frequentes

Passar no algoritmo de Luhn significa que o cartão é válido?

Não. Significa apenas que a sequência de dígitos é internamente consistente — sem erro de digitação detectável. O cartão pode não existir, estar cancelado ou sem limite. Só a operadora, no momento da autorização, confirma se ele é real e funciona.

Por que o último dígito do cartão parece aleatório?

Porque ele não é escolhido: é calculado. O dígito verificador é definido como o valor que faz a soma de Luhn fechar num múltiplo de 10. Ele existe só para detectar erros de digitação no resto do número.

O Luhn protege contra fraude?

Não. Ele não é um algoritmo de segurança nem de criptografia — é só detecção de erro. Qualquer pessoa pode gerar números que passam no teste. A proteção real vem de tokenização, CVV, 3-D Secure e da autorização do emissor.

Todas as bandeiras usam o algoritmo de Luhn?

Praticamente todas as redes de cartão (Visa, Mastercard, American Express, Elo, Discover, Diners, JCB) emitem números que respeitam o Luhn, conforme a ISO/IEC 7812. Houve raras exceções históricas, mas para os cartões em circulação hoje a regra vale.

Posso usar um número gerado para fazer uma compra?

Não. Um número que passa no Luhn não tem conta, saldo nem autorização por trás. Tentar usá-lo numa compra real é fraude. Os geradores existem para testar código em ambiente sandbox, não para transacionar.

Ferramentas citadas neste guia

Continue lendo