À la Global Verification Authority, on vient de te confier une mission cruciale. Dans toute la ville, des achats en ligne aux connexions sécurisées, d'innombrables opérations reposent sur l'exactitude d'identifiants numériques comme les numéros de carte bancaire, les numéros de compte bancaire, les codes de transaction et les identifiants de suivi. L'algorithme de Luhn est une simple formule de somme de contrôle qui permet d'identifier les nombres saisis par erreur.
Un lot d'identifiants vient d'arriver sur ton bureau. Ils doivent tous passer le test de Luhn pour garantir leur légitimité. Si l'un d'eux échoue, il sera signalé comme invalide, ce qui permet d'éviter des erreurs telles que des transactions incorrectes ou des vérifications de compte qui n'aboutissent pas.
Peux-tu veiller à ce que tout soit fait correctement ? L'intégrité de nombreux services dépend de toi.
Détermine si un nombre est valide d'après la formule de Luhn.
Le nombre sera fourni sous forme de string.
Les strings d'une longueur de 1 ou moins ne sont pas valides. Les espaces sont autorisés dans l'entrée, mais ils doivent être supprimés avant la vérification. Tous les autres caractères qui ne sont pas des chiffres sont interdits.
Le nombre à vérifier est 4539 3195 0343 6467.
La première étape de l'algorithme de Luhn consiste à commencer par la fin du nombre et à doubler un chiffre sur deux, en partant du deuxième chiffre en partant de la droite et en allant vers la gauche.
4539 3195 0343 6467
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (double these)
Si le résultat du doublement d'un chiffre est supérieur à 9, on soustrait 9 à ce résultat. On obtient alors :
8569 6195 0383 3437
Enfin, on additionne tous les chiffres. Si la somme est divisible par 10 sans reste, le nombre d'origine est valide.
8 + 5 + 6 + 9 + 6 + 1 + 9 + 5 + 0 + 3 + 8 + 3 + 3 + 4 + 3 + 7 = 80
80 est divisible par 10 sans reste, donc le nombre 4539 3195 0343 6467 est valide !
Le nombre à vérifier est 066 123 478.
On commence par la fin du nombre et on double un chiffre sur deux, en partant du deuxième chiffre en partant de la droite et en allant vers la gauche.
066 123 478
↑ ↑ ↑ ↑ (double these)
Si le résultat du doublement d'un chiffre est supérieur à 9, on soustrait 9 à ce résultat. On obtient alors :
036 226 458
On additionne les chiffres :
0 + 3 + 6 + 2 + 2 + 6 + 4 + 5 + 8 = 36
36 n'est pas divisible par 10 sans reste, donc le nombre 066 123 478 n'est pas valide !
Inscris-toi sur Exercism pour apprendre et maîtriser Lean avec 100 exercices, et un vrai mentorat humain, le tout gratuitement.
On explore 8 versions différentes de Luhn, en commençant par une implémentation Ruby très propre, en explorant quelques approches impératives et fonctionnelles, et en terminant par une version SQLite qu'Erik et Jeremy ont eu du mal à déchiffrer !