Calculadora do Algoritmo de Luhn - Validação de Cartão de Crédito e IMEI
Calculadora gratuita de Luhn mod 10 para validação de cartão de crédito, verificação de IMEI e verificação de identidade. Valide números instantaneamente ou gere dados de teste online.
Calculadora do Algoritmo de Luhn
Verificar se seu número passa na validação Luhn mod 10
Documentação
O que é o algoritmo de Luhn?
O algoritmo de Luhn, também chamado de algoritmo mod 10, é uma fórmula que verifica se uma sequência de dígitos pode ser um número de identificação válido. Ele é usado para detectar erros de digitação em números de cartão de crédito, números IMEI de telefones e outros códigos de identificação antes que causem um erro. O engenheiro da IBM Hans Peter Luhn descreveu o método em uma patente depositada em 1954.
O algoritmo não prova que um número é real ou está ativo. Ele apenas confirma que os dígitos seguem o padrão esperado. Um número de cartão pode passar pela verificação de Luhn e ainda assim ser falso, estar vencido ou sem fundos.
Como calcular o dígito verificador de Luhn
A verificação usa os dígitos de um número, lidos da direita para a esquerda.
- Começando pelo segundo dígito da direita, dobre todos os dígitos alternados.
- Se dobrar um dígito resultar em um número maior que 9, subtraia 9 dele. (Isso equivale a somar os dois dígitos do resultado; portanto, 16 torna-se 1 + 6 = 7 ou, de forma equivalente, 16 − 9 = 7.)
- Some todos os dígitos: os que foram dobrados, após o ajuste, e os que permaneceram inalterados.
- Se a soma total for divisível por 10, o número será válido. Caso contrário, será inválido.
Quando uma empresa emite novos números de identificação, ela usa as mesmas etapas ao contrário. Escolhe todos os dígitos, exceto o último, faz a verificação e então escolhe o "dígito verificador" final para que o total seja divisível por 10.
Exemplo resolvido: validação de um número de cartão
Considere o número de teste 4532015112830366.
- Dígitos da direita para a esquerda: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
- Dobre cada segundo dígito: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
- Subtraia 9 de qualquer resultado maior que 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
- Some-os: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
- 50 é divisível por 10, portanto o número é válido.
Exemplo resolvido: um número inválido
Considere 490154203237517, um número de 15 dígitos no formato usado pelos números IMEI.
Repetir as mesmas etapas resulta em uma soma de 59. Como 59 não é divisível por 10, esse número é inválido.
Para transformá-lo em um número válido, basta alterar o último dígito. Testar cada último dígito possível mostra que um dígito final igual a 8 eleva a soma para 60, que é divisível por 10. Portanto, 490154203237518 é um número de Luhn válido, enquanto todos os outros últimos dígitos de 0 a 9, exceto 8, produzem um número inválido.
Como usar esta calculadora
A calculadora tem dois modos, selecionados pelos botões de ação.
Validar verifica um número à medida que ele é digitado. Não é necessário pressionar nenhum botão. O resultado aparece assim que o campo contém dígitos, e uma decomposição passo a passo abaixo dele lista cada dígito, o valor que ele contribui após ser dobrado e ajustado, e a soma total.
Gerar cria um número que passa pela verificação. Os dígitos já presentes no campo são mantidos como início do novo número. A calculadora preenche o restante com dígitos aleatórios e acrescenta o dígito verificador. O resultado tem 16 dígitos, o comprimento típico de um número de cartão de pagamento, a menos que os dígitos fornecidos já tenham 16 dígitos ou mais; nesse caso, o resultado terá um dígito a mais que o valor fornecido.
Espaços, hífens e pontos na entrada são ignorados; portanto, "4532 0151 1283 0366" e "4532-0151-1283-0366" são lidos da mesma forma que os dígitos sem separadores. Qualquer outro caractere, como uma letra, é rejeitado com uma mensagem de erro.
Onde o algoritmo de Luhn é usado
- Cartões de pagamento. Visa, Mastercard, American Express e outras redes estruturam seus números de cartão para que o número completo passe pela verificação de Luhn. Formulários de pagamento podem usar isso para detectar um dígito digitado incorretamente antes de entrar em contato com o processador de pagamentos.
- Números IMEI. O identificador de 15 dígitos atribuído a telefones e outros dispositivos celulares inclui um dígito verificador de Luhn.
- Números canadenses de seguro social. O SIN de 9 dígitos usa a mesma verificação.
- Identificador Nacional de Prestador dos Estados Unidos (NPI). Prestadores de serviços de saúde nos Estados Unidos recebem um NPI de 10 dígitos validado por uma verificação baseada em Luhn.
O que o algoritmo de Luhn não detecta
O algoritmo sempre detecta um único dígito digitado incorretamente, independentemente de qual seja o dígito ou de onde ele apareça. Ele também detecta toda troca entre dígitos adjacentes, como digitar "39" em vez de "93", exceto em um caso específico: trocar um 0 e um 9 adjacentes, como transformar "09" em "90".
Ele também não detecta três erros de "duplas", nos quais um par repetido de dígitos é substituído por outro par repetido: 22 lido como 55, 33 lido como 66 e 44 lido como 77. Como essas limitações são conhecidas e específicas, a verificação de Luhn é confiável para detectar erros comuns de digitação, mas não é considerada, por si só, um sistema completo de detecção de erros.
Luhn não é uma verificação de segurança
Luhn foi criado para detectar erros acidentais de entrada de dados, não fraudes. Um número que passa pela verificação é apenas matematicamente bem-formado. A segurança real dos pagamentos depende de outras camadas adicionadas após a verificação de Luhn, como o código CVV do cartão, a verificação de endereço e a autenticação 3-D Secure. Luhn é simplesmente o primeiro filtro, de menor custo, executado antes dessas verificações mais demoradas.
Validando um número em JavaScript
1function isValidLuhn(number) {
2 const digits = number.replace(/\D/g, '').split('').map(Number);
3 if (digits.length === 0) return false;
4
5 let sum = 0;
6 let doubleDigit = false;
7 for (let i = digits.length - 1; i >= 0; i--) {
8 let d = digits[i];
9 if (doubleDigit) {
10 d *= 2;
11 if (d > 9) d -= 9;
12 }
13 sum += d;
14 doubleDigit = !doubleDigit;
15 }
16 return sum % 10 === 0;
17}
18A proteção contra entrada vazia é importante: uma cadeia vazia tem soma de dígitos igual a 0, e 0 é divisível por 10; portanto, sem essa proteção, a função consideraria erroneamente uma entrada vazia como um número válido. Para encontrar um dígito verificador em vez de testar um, execute o mesmo laço sobre os dígitos anteriores ao dígito verificador, mas comece a dobrar pelo último deles e então use (10 - sum % 10) % 10.
Perguntas frequentes
Para que o algoritmo de Luhn é usado?
Ele verifica se um número de identificação, como um número de cartão de crédito, um número IMEI ou um SIN canadense, é internamente consistente. Detecta dígitos digitados incorretamente ou transpostos antes que causem um erro de processamento.
Qual é a precisão do algoritmo de Luhn na detecção de erros?
Ele detecta todo dígito digitado incorretamente e quase todos os casos de troca entre dois dígitos adjacentes. A única troca que ele não detecta é entre 0 e 9 adjacentes. Ele também não detecta três substituições específicas de "duplas": 22 no lugar de 55, 33 no lugar de 66 e 44 no lugar de 77.
Um número de Luhn válido significa que o cartão é real?
Não. A verificação apenas confirma que os dígitos se encaixam no padrão esperado. Ela não informa se o cartão existe, está ativo ou tem fundos. As empresas acrescentam verificações separadas, como um código CVV, para isso.
A verificação de Luhn pode ser feita sem computador?
Sim. Ela requer apenas dobrar, subtrair e somar, portanto pode ser feita à mão ou com uma calculadora simples. Isso fazia parte do projeto original, destinado à era dos cartões perfurados, antes que os computadores digitais fossem comuns.
Os números gerados são números de cartão reais?
Não. O gerador produz apenas sequências de dígitos que satisfazem a verificação de Luhn. Elas servem para testar formulários de entrada. Nenhum banco as emitiu, e elas não podem ser usadas para pagar nada.
Por que ele é chamado de algoritmo mod 10?
Porque a etapa final verifica se a soma é divisível exatamente por 10, o que, em matemática, é escrito como "soma mod 10 = 0". "Mod" é a abreviação de módulo, o resto deixado após uma divisão.
Quem inventou o algoritmo de Luhn?
Hans Peter Luhn, engenheiro da IBM, descreveu o algoritmo em um pedido de patente depositado em 1954 (concedido em 1960 como a patente dos Estados Unidos 2.950.048). Ele também é conhecido por seu trabalho pioneiro na indexação computadorizada de textos.