← Início / Artigos Técnicos / Algoritmo de Luhn
Fintech & Algoritmos

Algoritmo de Luhn (Módulo 10): Validação de Cartões em Sandboxes

Por Alexandre Marcelino • Tempo de leitura: 7 minutos • Atualizado em Outubro de 2026

Ao construir um fluxo de checkout de e-commerce ou integrar gateways de pagamento como Stripe, Adyen, Pagar.me ou Mercado Pago, uma das primeiras linhas de defesa contra erros de digitação é o Algoritmo de Luhn, também amplamente conhecido como Módulo 10. Criado pelo cientista da IBM Hans Peter Luhn em 1954, o método tornou-se o padrão internacional adotado na especificação ISO/IEC 7812-1.

Ao contrário de algoritmos criptográficos (como SHA-256 ou AES), o algoritmo de Luhn não tem o propósito de garantir sigilo ou proteção contra adulteração maliciosa. Seu objetivo é puramente matemático e prático: detectar instantaneamente erros humanos comuns de digitação, como a troca acidental de um único dígito ou a transposição invertida de dois números adjacentes.

1. Estrutura do Número de Cartão (PAN - Primary Account Number)

O número gravado em um cartão de pagamento tradicional contém de 13 a 19 dígitos divididos em três blocos principais:

  • IIN / BIN (Issuer Identification Number): Os primeiros 6 a 8 dígitos identificam a indústria e a instituição financeira emissora. O primeiro algarismo identifica a indústria principal (MII):
    • 4 → Visa (Serviços Bancários / Financeiros)
    • 5 (ou range 2221-2720) → Mastercard (Serviços Bancários)
    • 3 → American Express (34/37) e Diners (Viagens e Entretenimento)
    • 5067, 4576, 4011... → Elo (Bandeira Nacional Brasileira)
    • 6062 → Hipercard
  • Número da Conta Individual: Do 7º dígito até o penúltimo algarismo, identifica a conta do titular junto ao banco emissor.
  • Dígito Verificador (Checksum): O último dígito à direita, gerado pelo cálculo do Algoritmo de Luhn.

2. O Passo a Passo Matemático do Cálculo

Para ilustrar a regra com clareza, vamos acompanhar a validação de um número arbitrário passo a passo:

  1. Comece do dígito mais à direita (o dígito verificador) e caminhe em direção à esquerda.
  2. Mantenha o dígito verificador inalterado. Dobre o valor de todos os dígitos em posições alternadas (a contar da direita para a esquerda: segundo, quarto, sexto, etc.).
  3. Se o resultado da multiplicação for maior do que 9 (por exemplo, 7 * 2 = 14), some os dois algarismos do resultado (1 + 4 = 5) ou simplesmente subtraia 9 (14 - 9 = 5).
  4. Some todos os valores obtidos na sequência.
  5. Se o total obtido for divisível por 10 (ou seja, Soma % 10 === 0), o número é matematicamente consistente e válido segundo a norma!

Exemplo Prático com a Sequência 49927398716:

1. Dígitos alternados dobrados da direita p/ esquerda: (1*2=2, 8*2=16 → 7, 3*2=6, 2*2=4, 9*2=18 → 9, 4*2=8)
2. Soma total = 6 + 2 + 7 + 7 + 9 + 6 + 7 + 4 + 9 + 9 + 8 = 70
3. 70 % 10 = 0 → Válido pelo Algoritmo de Luhn!

3. Implementação Limpa em JavaScript

Abaixo está uma implementação concisa e de alta performance do algoritmo:

function validarLuhn(numeroStr) {
  const limpo = numeroStr.replace(/\D/g, '');
  if (limpo.length < 12) return false;

  let soma = 0;
  let deveDobrar = false;

  // Itera da direita para a esquerda
  for (let i = limpo.length - 1; i >= 0; i--) {
    let digito = parseInt(limpo.charAt(i), 10);

    if (deveDobrar) {
      digito *= 2;
      if (digito > 9) digito -= 9;
    }

    soma += digito;
    deveDobrar = !deveDobrar;
  }

  return (soma % 10) === 0;
}
        

4. Por Que o Luhn é Crucial em Ambientes Sandbox / QA

No desenvolvimento de gateways, realizar chamadas de rede até o processador adquirente para descobrir que o cliente digitou um número com 15 dígitos incompletos é um desperdício de latência e custo por transação. Validar o Luhn localmente no frontend (via JavaScript assíncrono ou regex) traz três benefícios imediatos:

  • Feedback Instantâneo no Formulário: O usuário sabe na hora se errou um algarismo antes mesmo de clicar no botão "Pagar".
  • Detecção Automática de Bandeira: Inspecionando os primeiros dígitos (IIN) em tempo real, o formulário troca o ícone da bandeira (Visa, Mastercard, Elo) dinamicamente.
  • Proteção Contra Bots: Impede o envio em massa de cartões gerados aleatoriamente sem conformidade algorítmica.

Perguntas Frequentes (FAQ)

Um número que passa no Algoritmo de Luhn pode ser usado para compras?+
Absolutamente não. O algoritmo de Luhn é unicamente um teste de paridade e consistência matemática. Para que uma transação ocorra, o número precisaria corresponder a uma conta bancária ativa real, com saldo/limite, autorizada por um banco emissor, com data de expiração e criptograma de segurança dinâmico validados na rede de autorização financeira.
O que significa a sigla BIN e IIN?+
IIN significa Issuer Identification Number (Número de Identificação do Emissor) e é o termo técnico oficial da norma ISO/IEC 7812. No jargão do mercado de pagamentos, é popularmente chamado de BIN (Bank Identification Number). Corresponde aos 6 a 8 primeiros dígitos do cartão.
Outros documentos usam o Algoritmo de Luhn?+
Sim! Além dos cartões de crédito internacionais, o algoritmo de Luhn é adotado em números de IMEI de aparelhos celulares (para validação de identificação de hardware em redes GSM), números de segurados sociais em diversos países e na checagem de números de rastreamento logístico.
AM

Sobre o Autor: Alexandre Marcelino

Engenheiro de software e criador da plataforma Caixa do Dev. Especialista em engenharia de pagamentos digitais, arquitetura de microserviços e ferramentas de código aberto para a comunidade de tecnologia. Conheça seus projetos no GitHub (@xandy139).

Ver Gerador de CPF (Módulo 11) → Ver Gerador de CNPJ →