Luhn

Luhn

Moyen

Instructions

Étant donné un numéro, détermine s'il est valide ou non selon la formule de Luhn.

L'algorithme de Luhn est une formule de somme de contrôle simple, utilisée pour valider divers numéros d'identification, comme les numéros de carte bancaire ou les numéros d'assurance sociale canadiens.

La tâche consiste à vérifier si une string donnée est valide.

Valider un numéro

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.

Exemple 1 : numéro de carte bancaire valide

4539 3195 0343 6467

La première étape de l'algorithme de Luhn consiste à doubler un chiffre sur deux, en partant de la droite. On va donc doubler

4_3_ 3_9_ 0_4_ 6_6_

Si doubler un chiffre donne un nombre supérieur à 9, il faut soustraire 9 au produit. Voici le résultat de ces doublements :

8569 6195 0383 3437

Ensuite, on additionne tous les chiffres :

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

Si la somme est divisible par 10, alors le numéro est valide. Ce numéro est valide !

Exemple 2 : numéro de carte bancaire invalide

8273 1232 7352 0569

Double un chiffre sur deux, en partant de la droite

7253 2262 5312 0539

Additionne les chiffres

7+2+5+3+2+2+6+2+5+3+1+2+0+5+3+9 = 57

57 n'est pas divisible par 10, donc ce numéro n'est pas valide.

Note

Lis les instructions attentivement : si tu les survoles, tu risques de manquer des détails importants sur la direction.

Modifie via GitHub Le lien s'ouvre dans une nouvelle fenêtre ou un nouvel onglet
Pharo Exercism

Prêt à commencer Luhn ?

Inscris-toi sur Exercism pour apprendre et maîtriser Pharo avec 50 exercices, et un vrai mentorat humain, le tout gratuitement.

Analyse approfondie de Luhn !

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 !