cartebancaire

TP2-PROG-03 : Algorithme de Luhn (carte de crédit)#

Objectifs pédagogiques#

  • comprendre ce qu’est une somme de contrôle (checksum)

  • connaître le système de codage des numéros de carte de crédit

  • mettre en oeuvre un système de somme de contrôle à l’aide de l’algorithme de Luhn

  • implémenter l’algorithme de Luhn en Python

  • vérifier la validité de sa carte de crédit

Somme de contrôle (checksum)#

Lorsqu’un émetteur envoie un message à un récepteur, il se peut que la voie de communication ne soit pas entièrement fiable. Cela signifie que le message reçu a pu être altéré et qu’il n’est plus exactement identique au message original envoyé.

La somme de contrôle (checksum en anglais) permet de détecter une erreur mais pas de la corriger.

check (Source : Wikipedia)

Dans l’exemple ci-dessus, on convertit les caractères en hexadécimal en suivant la table ASCII. la somme des éléments est ensuite calculée, c’est ce que l’on appelle le hachage et se réduit à une valeur de contrôle : la somme de contrôle. Lorsqu’une lettre change (par exemple le o final devient a), la somme de contrôle change : une erreur est détectée.

On remarque qu’il n’est pas possible avec la somme de contrôle de réparer l’erreur : le récepteur demande à l’émetteur de lui renvoyer le message. Il existe d’autres algorithmes de contrôle qui permettent de détecter ET de corriger l’erreur : ce sont les algorithmes dits de code cycliques. Ces algorithmes dépassent le cadre de ce cours.

Numéro d’une carte de crédit#

Toute carte de crédit est formée de 16 chiffres compris entre \(0_{10}\) et \(9_{10}\) (sauf le premier) :

CC

Chiffre

Signification

1

MII (Major Industry Identifier) : 3 : American Express, 4 : Visa, 5 : Mastercard

de 1 à 6

IIN (Issuer Identification Number)

de 7 à 15

Numéro de compte

16

CODE DE CONTRÔLE

On note que les chiffres de 7 à 15 qui représentent le numéro de compte permettent de coder \(10^9\) comptes différents, soit un milliard.

Le CODE DE CONTRÒLE est le sujet de ce TP

Calcul du code de contrôle#

L’algorithme pour calculer le dernier chiffre de la carte de crédit se déroule en trois étapes :

  1. On multiplie par deux un chiffre sur deux en commençant par l’avant-dernier (le 15ème) et en se déplaçant de droite à gauche. Si le double du chiffre dépasse 9 (par exemple \(2 \times 8 = 16\), alors on soustrait 9 au double

  2. On additionne l’ensemble des 15 chiffres trouvés (ceux qui ont été doublés, et ceux qui n’ont pas été doublés)

  3. Si le résultat modulo 10 est égal à zéro, alors le numéro de carte de crédit est valide.

Exercice 1#

Dessinez l’algorigramme d’un algorithme permettant la vérification de la validité d’un numéro de carte de crédit

Vous pouvez vous aider de la feuille de triche

Exercice 2#

  • Ecrire un programme qui implémente l’algorithme de Luhn et vérifie la validité d’un numéro de carte de crédit donné

  • Traduisez votre algorigramme en Python !

  • Testez votre programme avec les numéros de carte de crédit suivants :

    • code invalide : [5,6,3,5,4,0,0,2,9,5,6,1,3,4,1,1]

    • code valide : [4,3,9,6,8,3,7,4,1,2,0,4,2,7,5,5]

    • code invalide : [4,6,2,4,7,4,8,2,3,3,2,4,9,0,8,0]

Exercice 3#

Sur la base de ce programme, écrire un nouveau programme qui génère un numéro de carte de crédit valide quelconque