Luhn

Luhn

Fácil

Introdução

Na Autoridade de Verificação Global, acabaram de te confiar uma missão crítica. Por toda a cidade, desde compras online a 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 que ajuda a identificar números mal digitados.

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, é assinalado como inválido, o que evita erros como transações incorretas ou verificações de conta falhadas.

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

Instruções

Determina se um número é válido de acordo com a fórmula de Luhn.

O número será fornecido como uma string.

Validar um número

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

Exemplos

Número de cartão de crédito válido

O número a verificar é 4539 3195 0343 6467.

O primeiro passo do algoritmo de Luhn é começar pelo fim do número e duplicar cada segundo algarismo, começando no segundo algarismo a contar da direita e avançando para a esquerda.

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

Se o resultado de duplicar um algarismo for maior do que 9, subtraímos 9 a esse resultado. Ficamos com:

8569 6195 0383 3437

Por fim, somamos todos os algarismos. Se a soma for divisível por 10, o número original é válido.

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

80 é divisível por 10, por isso o número 4539 3195 0343 6467 é válido!

Número de segurança social canadiano inválido

O número a verificar é 066 123 478.

Começamos pelo fim do número e duplicamos cada segundo algarismo, começando no segundo algarismo a contar da direita e avançando para a esquerda.

066 123 478
 ↑  ↑ ↑  ↑  (double these)

Se o resultado de duplicar um algarismo for maior do que 9, subtraímos 9 a esse resultado. Ficamos com:

036 226 458

Somamos os algarismos:

0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36

36 não é divisível por 10, por isso o número 066 123 478 não é válido!

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

Estás pronto para começar Luhn?

Inscreve-te no Exercism para aprenderes e dominares V com 113 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!