Dado um número, determina se é válido segundo a fórmula de Luhn.
O algoritmo de Luhn é uma fórmula simples de soma de verificação usada para validar vários números de identificação, como números de cartões de crédito e números de segurança social canadianos.
A tarefa é verificar se uma determinada string é válida.
Strings com comprimento 1 ou menos não são válidas. São permitidos espaços no valor de entrada, mas devem ser removidos antes da verificação. Todos os outros carateres que não sejam algarismos não são permitidos.
4539 3195 0343 6467
O primeiro passo do algoritmo de Luhn é duplicar cada segundo algarismo, a começar pela direita. Vamos duplicar
4_3_ 3_9_ 0_4_ 6_6_
Se duplicar o número der um 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, o número é válido. Este número é válido!
8273 1232 7352 0569
Duplica cada segundo algarismo, a começar 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, por isso este número não é válido.
Lê as instruções com atenção: se apenas passares os olhos, podes perder detalhes importantes sobre a direção.
Inscreve-te no Exercism para aprenderes e dominares Pharo com 50 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!