Luhn

Luhn

Médio

Introdução

Na Global Verification Authority, uma tarefa crítica acaba de ser confiada a você. Por toda a cidade, de compras on-line a logins seguros, inúmeras operações dependem da exatidão de identificadores numéricos como números de cartão de crédito, números de conta bancária, códigos de transação e IDs de rastreamento. O algoritmo de Luhn é uma fórmula simples de soma de verificação usada para garantir que esses números sejam válidos e livres de erros.

Um lote de identificadores acaba de chegar à sua mesa. Todos eles precisam passar no teste de Luhn para garantir que sejam legítimos. Se algum falhar, será marcado como inválido, evitando erros ou fraudes, como transações incorretas ou acesso não autorizado.

Você consegue garantir que isso seja feito do jeito certo? A integridade de muitos serviços depende de você.

Instruções

Determine se um número de cartão de crédito é válido de acordo com a fórmula de Luhn.

O número será fornecido como uma string.

Validando um número

Strings de comprimento 1 ou menos não são válidas. Espaços são permitidos na entrada, mas devem ser removidos antes da verificação. Todos os outros caracteres que não sejam dígitos são proibidos.

Exemplo 1: número de cartão de crédito válido

4539 3195 0343 6467

O primeiro passo do algoritmo de Luhn é dobrar cada segundo dígito, começando da direita. Vamos dobrar

4539 3195 0343 6467
↑ ↑  ↑ ↑  ↑ ↑  ↑ ↑  (double these)

Se dobrar o número resultar em um número maior que 9, subtraia 9 do produto. Os resultados da nossa duplicação:

8569 6195 0383 3437

Depois, some todos os dígitos:

8+5+6+9+6+1+9+5+0+3+8+3+3+4+3+7 = 80

Se a soma for divisível por 10, então o número é válido. Este número é válido!

Exemplo 2: número de cartão de crédito inválido

8273 1232 7352 0569

Dobre os segundos dígitos, começando da direita

7253 2262 5312 0539

Some os dígitos

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57 não é divisível por 10, então este número não é válido.

Editar via GitHub O link abre em uma nova janela ou aba
Erlang Exercism

Tudo pronto para começar Luhn?

Crie sua conta no Exercism para aprender e dominar Erlang com 85 exercícios e mentoria humana de verdade, tudo de graça.

Mergulho profundo em Luhn!

Exploramos 8 versões diferentes de Luhn, começando com uma implementação em Ruby muito bem organizada, passando por algumas abordagens imperativas e funcionais, e terminando com uma versão em SQLite que deu trabalho para Erik e Jeremy decifrar!