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.
Determina se um número é válido de acordo com a fórmula de Luhn.
O número será fornecido como uma string.
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.
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!
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!
Inscreve-te no Exercism para aprenderes e dominares C# com 62 conceitos178 exercícios, e mentoria humana real, tudo grátis.
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!