Menu

Algoritmo de Luhn: como funciona o dígito do cartão

O algoritmo de Luhn é a conta que gera o dígito verificador do cartão. Veja por que ele existe, como calcular à mão e o que ele não consegue garantir.

Publicado em

  • dígito verificador
  • validação
  • pagamentos

O algoritmo de Luhn é uma conta de soma simples que produz o último dígito de um número de cartão. Ele existe para detectar erros de digitação, e não para proteger nada: entender esse limite é o que separa uma validação útil de uma falsa sensação de segurança. Neste texto, mostramos para que a conta serve, como refazê-la à mão e onde ela falha.

O que o algoritmo verifica

Antes de qualquer explicação técnica, vale fixar a ideia central. O número de um cartão termina com um dígito que não identifica a conta nem a bandeira. Ele é calculado a partir de todos os dígitos anteriores, de modo que qualquer alteração em um deles torne o conjunto inconsistente.

Quando um formulário diz que o número é inválido antes mesmo de enviar os dados, é essa conta que rodou no navegador. Ela é aritmética pura, publicada há décadas e aplicada no setor de cartões pela norma internacional que descreve a numeração de cartões de pagamento. Não há nada de secreto nela, e é por isso que ela nunca deve ser tratada como mecanismo de segurança.

Como calcular o dígito à mão

A conta é mais fácil do que a descrição sugere. Tomando um número sem o dígito final, o procedimento é este:

  1. Comece pelo dígito mais à direita e siga para a esquerda.
  2. A cada segundo dígito, multiplique por dois.
  3. Se o resultado da multiplicação passar de nove, subtraia nove, ou some os algarismos do resultado — as duas formas dão o mesmo valor.
  4. Some todos os números obtidos, os dobrados e os que ficaram como estavam.
  5. Calcule quanto falta para a próxima dezena cheia. Esse valor é o dígito verificador; se a soma já fecha em dezena exata, o dígito é zero.

Vale testar com um número curto antes de aplicar a um número completo. Com dez ou doze dígitos, o cálculo é rápido e o resultado deixa claro que a conta não olha para bancos nem para contas: ela só olha para os algarismos.

A razão de existir um dígito a mais é cotidiana. Cartões são lidos por pessoas cansadas, digitados em teclados numéricos apertados e transcritos de recibos à mão. Nesse cenário, o erro mais comum é trocar um dígito por outro vizinho ou inverter dois dígitos em sequência.

O dígito verificador resolve a maior parte disso de forma barata. Ele não impede o erro, mas o torna visível imediatamente, antes que o pedido seja enviado à rede de pagamentos. Imagine o custo de descobrir um dígito errado apenas na etapa de autorização, com o cliente já esperando a confirmação na tela.

O que o algoritmo não consegue detectar

Nenhuma soma de verificação pega todos os erros, e vale ser honesto sobre os pontos cegos:

  • Trocar um dígito por outro que difere em nove unidades passa despercebido na posição dobrada.
  • Algumas inversões de dígitos não produzem diferença na soma e, portanto, não são detectadas, embora a maioria das inversões de dois algarismos vizinhos seja.
  • A conta não verifica se o comprimento é plausível para a bandeira, pois não sabe qual é a bandeira.
  • Ela não consulta prefixos, não confere se o emissor existe e não tem qualquer informação sobre a conta.

Em outras palavras, o algoritmo cobre a classe mais provável de erro humano, não a totalidade deles.

Um número que passa no Luhn é um número válido?

Não. Passar na conta diz apenas que os dígitos foram compostos com consistência interna. Um número inventado, com prefixo de bandeira correto e comprimento adequado, passa na conta com a mesma facilidade que o número de um cartão emitido — e continua sem existir. Validar formato e verificar existência de conta são operações completamente diferentes, feitas por partes diferentes do sistema.

Por isso é comum usar números fabricados em ambiente de teste: eles precisam passar nesse tipo de verificação para que o fluxo avance, como descreve a página sobre números de cartão de crédito de teste.

Uma cobrança funciona se a conta do Luhn bater?

Jamais. A autorização é decidida pelo banco emissor, que verifica se a conta existe, se está ativa e se há limite disponível. Um número gerado por qualquer ferramenta não tem emissor, então não há conta para consultar e a resposta é uma recusa.

Essa distinção evita um mal-entendido frequente em times iniciantes: uma validação verde no formulário não é sinal de que o pagamento vai ser aprovado, nem em teste nem em produção.

Conferindo o dígito no gerador

Se você precisa de números que passem nessa verificação sem fazer a conta à mão, o gerador de cartão virtual desta página monta número, validade e código de segurança de forma coerente com o formato da bandeira escolhida. Os resultados são estruturalmente válidos, mas nunca foram emitidos por nenhuma instituição e não podem ser usados em uma cobrança real.

Para quem desenvolve: ordem de validação

A conta do dígito é apenas uma etapa dentro de uma sequência. Uma ordem que costuma funcionar bem é esta:

  • Primeiro, normalize a entrada: remova espaços, hífens e pontos, e descarte o que não for dígito.
  • Em seguida, confira o comprimento aceitável para a bandeira detectada pelo prefixo, como detalha o texto sobre formato do número do cartão.
  • Só então rode a conta do dígito. Faz pouco sentido gastar esse cálculo em uma entrada com três dígitos.
  • Trate a falha como erro de digitação, com mensagem clara, e não como suspeita de fraude.
  • Lembre-se de que a mesma checagem precisa existir no servidor. Uma verificação que roda apenas no navegador pode ser contornada, e a página sobre validar número de cartão trata desse ponto com mais detalhe.

Próximos passos

Se a sua dúvida era só como a conta funciona, você já tem o suficiente para conferi-la ou refazê-la à mão. Se o objetivo é montar dados de teste prontos para uso, veja como escolher números por bandeira ou gere um conjunto agora mesmo no gerador de cartão virtual.

Continue lendo

Artigos sobre Gerador de número de cartão de crédito falso