Luhn

Luhn

Médio

Introdução

Na Autoridade Global de Verificação, acabaram de te confiar uma missão crítica. Por toda a cidade, das compras online aos inícios de sessão 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 identificadores de rastreio. O algoritmo de Luhn é uma fórmula simples de soma de verificação, usada para garantir que estes números são válidos e estão livres de erros.

Acabou de chegar à tua secretária um lote de identificadores. Todos têm de passar no teste de Luhn para garantir que são legítimos. Se algum falhar, será marcado como inválido, evitando erros ou fraudes, como transações incorretas ou acessos não autorizados.

Consegues garantir que isto é feito como deve ser? A integridade de muitos serviços depende de ti.

Instruções

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

O número é fornecido como uma string.

Validar um número

Strings de comprimento igual ou inferior a 1 não são válidas. Os espaços são permitidos na entrada, mas devem ser removidos antes da verificação. Todos os outros carateres que não sejam algarismos não são permitidos.

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

4539 3195 0343 6467

O primeiro passo do algoritmo de Luhn é duplicar cada segundo algarismo, começando pela direita. Vamos duplicar

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

Se duplicar o algarismo resultar num número maior que 9, subtrai 9 ao produto. Os resultados da nossa duplicação:

8569 6195 0383 3437

Depois soma todos os algarismos:

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 sem resto, 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

Duplica cada segundo algarismo, começando pela direita

7253 2262 5312 0539

Soma os algarismos

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

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

Editar via GitHub A ligação abre numa nova janela ou separador
Erlang Exercism

Estás pronto para começar Luhn?

Inscreve-te no Exercism para aprenderes e dominares Erlang com 85 exercícios, e mentoria humana real, tudo grátis.

Mergulha a fundo em Luhn!

Exploramos 8 versões diferentes do Luhn, começando com uma implementação Ruby muito arrumada, passando por algumas abordagens imperativas e funcionais e acabando numa versão SQLite que deu algum trabalho ao Erik e ao Jeremy a decifrar!