search

Found

info Visão geral

Ferramenta Luhn (Mod 10) em dois modos: VERIFY valida um número de cartão/IMEI; GENERATE produz o dígito verificador com traço por cada algarismo.

📘 Como usar

  1. Alterne o modo entre VERIFY (validar um número completo) e GENERATE (calcular o dígito verificador que falta)
  2. Cole a sequência de dígitos no campo de entrada; espaços e hífenes são removidos automaticamente
  3. Leia o veredicto Válido / Inválido ou o dígito verificador calculado no painel de resultado
  4. Compare a tabela de duplicação, soma de algarismos e total acumulado com sua própria implementação

Calculadora de checksum Luhn

Insira dígitos para verificar
Article

Calculadora de checksum Luhn | Valide ou gere o Mod 10 com tabela de traço por algarismo

Ferramenta Luhn (Mod 10) em dois modos para cartões de crédito, IMEI e SIN canadense. Valide um número completo ou produza o dígito verificador que falta, com uma tabela de cinco colunas que expõe posição, valor duplicado, soma de algarismos e total acumulado para cada dígito.

💡 Sobre esta ferramenta

Quem desenvolve integrações de pagamento no Brasil tipicamente esbarra em Luhn ao mexer com cartões internacionais via Stripe, Adyen ou Mercado Pago. As bandeiras locais (Elo, Hipercard) também seguem ISO/IEC 7812 e portanto usam o mesmo algoritmo Mod 10 no dígito final. Quando um teste falha porque o número gerado não bate com a referência, surge a necessidade de comparar o cálculo dígito a dígito — e a maioria dos validadores on-line só devolve o veredicto, sem mostrar onde o cálculo divergiu.

Esta ferramenta abre todo o processo em uma tabela de cinco colunas: índice de posição contado da direita, dígito original, valor duplicado (quando aplicável), soma de algarismos (16 → 1 + 6 = 7) e total acumulado. Cada linha é uma operação atômica que você pode replicar em Python, Go, Ruby ou direto em SQL, e a primeira coluna que diverge da sua implementação aponta exatamente para o bug.

Há dois modos. VERIFY recebe um número completo (incluindo o dígito verificador) e diz se a soma total é múltipla de 10. GENERATE recebe o número sem o dígito verificador e calcula qual algarismo final faria a soma fechar em múltiplo de 10. GENERATE é o que se usa para sintetizar dados de teste num BIN específico, por exemplo quando o cartão 4242 4242 4242 4242 do Stripe testmode não cobre o cenário que você precisa.

A entrada aceita os agrupamentos visuais habituais — espaços (4532 0151 1283 0366), hífenes (4532-0151-1283-0366) ou a sequência crua. A normalização interna preserva apenas os dígitos antes do cálculo.

🧐 Perguntas frequentes

Quando usar VERIFY e quando usar GENERATE? VERIFY responde "este número está completo e passa no Mod 10?". GENERATE responde "qual algarismo eu preciso colocar no final para que passe no Mod 10?". GENERATE é a escolha natural para fabricar dados de teste, validar IMEI parcialmente conhecidos ou ensinar a operação inversa do algoritmo.

Como funciona quando a duplicação ultrapassa 9? Soma-se os algarismos do produto: 8 × 2 = 16 vira 1 + 6 = 7. Algumas implementações usam o atalho duplicado − 9, que é algebricamente igual para os algarismos de 5 a 9. Esta ferramenta exibe a forma de soma de algarismos, que é a versão da patente original e da maioria do material didático.

Funciona com IMEI e outros identificadores? Sim, para todos baseados em Luhn Mod 10: cartões de crédito (ISO/IEC 7812), IMEI de celulares (3GPP TS 23.003, 15 algarismos), SIN canadense (9 algarismos) e NPI americano (10 algarismos, identificador de profissional de saúde). ISBN-10 usa Mod 11 e não é compatível; ISBN-13 e EAN usam Mod 10 com pesos 1-3 alternados, que também não é o Luhn clássico tratado aqui.

Luhn dá segurança ao cartão? Não. O algoritmo foi desenhado em 1954 apenas para detectar erros humanos de digitação: um algarismo trocado ou dois adjacentes invertidos. Não impede um atacante que conheça o esquema de produzir números válidos. Segurança real vem da malha de autorização das bandeiras, da criptografia do chip EMV e do 3DS — Luhn é só o primeiro filtro, descartando lixo tipográfico antes mesmo de o número chegar à rede.

Existe limite de comprimento? Não há limite máximo. A tabela renderiza para qualquer comprimento. É útil quando você precisa validar identificadores internos não padronizados (códigos de estoque, IDs de cliente) sobre os quais alguém adicionou um dígito Luhn em um comprimento personalizado.

E quanto ao dígito verificador do CPF? O CPF brasileiro não usa Luhn. Os dois últimos dígitos do CPF são calculados com pesos decrescentes e Mod 11, o que é mais robusto do que Luhn por detectar mais classes de transposição. Esta ferramenta cobre apenas Luhn Mod 10; para CPF é preciso outra rotina específica.

📚 Curiosidades

Hans Peter Luhn era pesquisador da IBM quando registrou a patente US 2950048 em 1954, concedida em 1960. Apesar do alcance que o algoritmo de Mod 10 viria a ter, é a contribuição menos famosa do trabalho de Luhn dentro da ciência da computação: ele é o inventor do índice KWIC (Key Word in Context), um precursor direto dos mecanismos modernos de busca por palavra-chave. Para o próprio Luhn, o dígito verificador era um experimento lateral para reduzir erros em leitoras de cartões perfurados nos bancos da época.

A patente expirou em 1977, exatamente quando Visa e Mastercard estavam costurando o padrão internacional de numeração de cartões que viria a ser publicado como ISO/IEC 7812. A coincidência fez Luhn migrar de tecnologia interna da IBM para algoritmo padrão das bandeiras: livre de royalties, verificável manualmente em uma máquina registradora analógica e suficientemente robusto contra erros de digitação para servir como primeira camada de validação.

Um detalhe curioso: Luhn não consegue detectar a transposição adjacente entre 0 e 9. É o único caso em que o algoritmo erra dizendo "válido" para um número embaralhado. Por isso, sistemas de produção sempre encaixam Luhn entre uma checagem de comprimento e uma verificação de BIN (os seis primeiros algarismos, que identificam emissor e bandeira), eliminando esse ponto cego antes mesmo de o cálculo Mod 10 entrar em ação.