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:
- Comece pelo dígito mais à direita e siga para a esquerda.
- A cada segundo dígito, multiplique por dois.
- 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.
- Some todos os números obtidos, os dobrados e os que ficaram como estavam.
- 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.