À 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 selon la formule de Luhn.
Le numéro sera fourni sous la forme d'une string.
Les strings de longueur 1 ou moins ne sont pas valides. Les espaces sont autorisés dans l'entrée, mais il faut les retirer avant de vérifier. 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 à partir de la fin du nombre et à doubler un chiffre sur deux, en commençant par le deuxième chiffre en partant de la droite et en allant vers la gauche.
4539 3195 0343 6467
↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ (double these)
Si le double d'un chiffre donne un nombre 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, 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, donc le nombre 4539 3195 0343 6467 est valide !
Le nombre à vérifier est 066 123 468.
On part de la fin du nombre et on double un chiffre sur deux, en commençant par le deuxième chiffre en partant de la droite et en allant vers la gauche.
066 123 478
↑ ↑ ↑ ↑ (double these)
Si le double d'un chiffre donne un nombre 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, donc le nombre 066 123 478 n'est pas valide !
Inscris-toi sur Exercism pour apprendre et maîtriser YAMLScript avec 60 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 !