Pular para o conteúdo

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

Ação

Verificar se seu número passa na validação Luhn mod 10

Calculadora de carregamento...
📚

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.

  1. Começando pelo segundo dígito da direita, dobre todos os dígitos alternados.
  2. 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.)
  3. Some todos os dígitos: os que foram dobrados, após o ajuste, e os que permaneceram inalterados.
  4. 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.

  1. Dígitos da direita para a esquerda: 6, 6, 3, 0, 3, 8, 2, 1, 1, 5, 1, 0, 2, 3, 5, 4
  2. Dobre cada segundo dígito: 6, 12, 3, 0, 3, 16, 2, 2, 1, 10, 1, 0, 2, 6, 5, 8
  3. Subtraia 9 de qualquer resultado maior que 9: 6, 3, 3, 0, 3, 7, 2, 2, 1, 1, 1, 0, 2, 6, 5, 8
  4. Some-os: 6+3+3+0+3+7+2+2+1+1+1+0+2+6+5+8 = 50
  5. 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}
18

A 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.