BTS SIO
SI4 LES BASES DE LA PROGRAMMATION
LANGAGE PYTHON
Lycée des Métiers Jacques Prévert
Combs la Ville
Section BTS Services Informatiques aux Organisations
1
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
BTS SIO
SI4 LES BASES DE LA PROGRAMMATION
LANGAGE PYTHON
Lycée des Métiers Jacques Prévert
Combs la Ville
Section BTS Services Informatiques aux Organisations
2
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.
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 ?
n
=longueur(
chaine
)
chainebis
= ""
Pour
i
allant de 1 à
n
Si
i
%2 = 0
chainebis
=
chainebis
+
chaine
[
i
]
Fin de Si
Fin de Pour
Afficher
chainebis
BTS SIO
SI4 LES BASES DE LA PROGRAMMATION
LANGAGE PYTHON
Lycée des Métiers Jacques Prévert
Combs la Ville
Section BTS Services Informatiques aux Organisations
3
3. On donne ci-contre l’algorithme d’une fonction écrit en
pseudo-code qui est incomplet.
c
haine
est une chaîne de caractères.
La fonction
int()
convertit en entier une chaine de
caractères.
Cet algorithme doit calculer la somme de tous les chiffres
de c
haine
. Le compléter ci-
contre (il n’est pas demandé
de le recopier).
fonction
sommeChiffre
(
chaine
)
n
=longueur(
chaine
)
Pour
i
allant de 1 à
n
a=int(chaine[i])
Fin de Pour
Retourner somme
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.
fonction
etape1
(
chaine
)
n
=longueur(
chaine
)
chainebis=
""
Pour
i
allant de 1 à
n
………………………
Retourner
chainebis
Partie machine 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.
1 / 3 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !