SI4 – LES BASES DE LA PROGRAMMATION LANGAGE PYTHON

publicité
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
Téléchargement