BTS SIO SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON TP : Algorithme de clé de Luhn Principe : L’algorithme de la clé de Luhn est utilisé pour vérifier le format des numéros de carte bancaire et d’autres numéros. Le même algorithme est utilisé pour les numéros de cartes SNCF à 17 chiffres. Ainsi, pour vérifier un numéro de carte bancaire, on double les chiffres de rang pair (à partir de la gauche) du numéro à 16 chiffres ; si le total est multiple de 10, c’est un numéro de carte qui a un format valide. Exemple : une carte bancaire a le numéro suivant : 3573 6300 5499 6611 N°: 3 5 7 3 6 3 0 0 5 4 9 9 6 6 1 1 x x x x x x x x x x x x x x x x 2 1 2 1 2 1 2 1 2 1 2 1 2 1 2 1 ___________________________________________________ 6 5 14 3 12 3 0 0 10 4 18 9 12 6 2 1 Calcul de la somme : 6+5+1+4+3+1+2+3+0+0+1+0+4+1+8+9+1+2+6+2+1 = 60. Il s’agit d’un format valide car 60 est un multiple de 10. Remarque : les 15 premiers chiffres de la carte donnent des renseignements sur le type de carte, le nom de la banque, le numéro de compte.......le 16ième chiffre est la clé de Luhn. Retrouver la clé de Luhn pour une carte : Les 15 premiers chiffres de la carte sont : 4970 1012 3456 789 Etape n°1 On multiplie le premier chiffre de gauche par 2. Si le résultat de la multiplication par 2 est strictement supérieur à 9, on retranche 9. Ainsi 4 devient 8 auquel on ne retranche pas 9 puisque 4 est strictement inférieur à 9. Le deuxième chiffre en partant de la gauche reste inchangé. Ainsi 9 reste 9. On répète cet algorithme : pour le troisième chiffre en partant de la gauche7 devient 8 car 7 2=14 et 14 9 =5. 0 reste 0 ; 1 devient 2 ; 0 reste 0 ; 1 devient 2 ; 2 reste 2 ; 3 devient 6 ; 4 reste 4, etc A la fin de la première étape, on obtient 8950 2022 6416 589 Lycée des Métiers Jacques Prévert Combs – la – Ville Section BTS Services Informatiques aux Organisations 1 BTS SIO SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON Etape n°2 On calcule la somme des quinze chiffres obtenus à la fin de l’étape n°1. Sur l’exemple, 8+9+5+0+2+0+2+2+6+4+1+6+5+8+9 = 67 Etape n°3 On calcule le reste de la division euclidienne par 10 du nombre obtenu à l’étape n°2 . La clé de Luhn est 10 reste précédent. Sur l’exemple, le reste de la division euclidienne de 67 par 10 est 7. La clé est 10 7= 3 Ainsi le numéro complet de la carte est 4970 1012 3456 7893 Activité : (papier 30 minutes à l’examen et machine 30 minutes) 1. Les 15 premiers chiffres d’une carte bancaire sont : 5612 5027 3094 640. Calculer la clé de Luhn de cette carte. n=longueur(chaine) 2. On donne ci-contre un algorithme où chaine est une chaîne de caractères. %2 est le reste de la division euclidienne de par 2. Si chaine contient la chaîne de caractères 1234567, quelle est la valeur affichée par l’algorithme ? chainebis= "" Pour i allant de 1 à n Si i %2 = 0 chainebis = chainebis + chaine[ i ] Fin de Si Fin de Pour Afficher chainebis Lycée des Métiers Jacques Prévert Combs – la – Ville Section BTS Services Informatiques aux Organisations 2 SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON BTS SIO fonction sommeChiffre(chaine) 3. On donne ci-contre l’algorithme d’une fonction écrit en pseudo-code qui est incomplet. chaine est une chaîne de caractères. n=longueur(chaine) La fonction int() convertit en entier une chaine de caractères. Pour i allant de 1 à n Cet algorithme doit calculer la somme de tous les chiffres de chaine. Le compléter ci-contre (il n’est pas demandé de le recopier). a=int(chaine[i]) Fin de Pour Retourner somme 4. L’étape n°1 de l’algorithme permettant de calculer la clé de Luhn est effectuée dans une fonction appelée etape1(chaine) où chaine est une chaine de caractères. On donne ci-contre le début de la fonction. Compléter la fonction sans en modifier de début afin qu’elle retourne la chaîne de caractères modifiée chainebis. Par exemple, si le paramètre chaine de la fonction a pour contenu la chaîne de caractères 4970 1012 3456 789, la valeur retournée par la fonction sera la chaîne de caractères 8950 2022 6416 589. Partie machine fonction etape1(chaine) n=longueur(chaine) chainebis= "" Pour i allant de 1 à n ……………………… Retourner chainebis 30 minutes 5. Implémenter la fonction sommeChiffre (chaine) et etape1 (chaine) de la partie papier. 6. On veut écrire un programme qui vérifie si la clé, le seizième chiffre du numéro de la carte bancaire, correspond bien aux quinze premiers chiffres de la carte. Ecrire un programme qui fasse appel aux fonctions déjà implémentées qui demande la saisie des seize chiffres d’une carte bancaire qui calcule la clé à partir des quinze premiers chiffres de la carte qui compare la clé calculée et la clé de la carte et qui affiche si le numéro de la carte saisi semble correct ou pas. Lycée des Métiers Jacques Prévert Combs – la – Ville Section BTS Services Informatiques aux Organisations 3