Ce matin, je vous présente un petit article qui intéressera les programmeurs qui développent des systèmes de paiement par carte de crédit. Naturellement, si vous n'êtes pas en mesure de vous conformer aux standards de sécurité PCI (Payment Card Industry), vous devrez vous tourner vers un sous-traitant comme PayPal, Google Checkout, Moneris, ou autre, pour déléguer la responsabilité de la saisie du numéro de carte de crédit.
Sinon, si tout est en ordre, vous pourrez utiliser les API et saisir les numéros de façon plus transparente. Lorsqu'un acheteur entrera son numéro, on pourra préalablement vérifier sa validité avant de soumettre la demande de transaction. Ceci est rendu possible à l'aide de l'algorithme de Hans Peter Luhn (maintenant du domaine public), aussi connu sous le nom de mod10. On le surnomme ainsi car il utilise l'opérateur modulo pour connaître le reste d'une division par 10 qui doit être égal à 0 pour être considéré valide. Il faut bien comprendre que ceci ne nous dira pas si la carte est réelle, en fonction ou expirée. Le checksum nous indiquera seulement si la série de chiffres ne présente pas d'erreur de saisie (chiffre manquant, inversés, etc).
Si on jete un oeil à la structure d'un numéro de carte de fictif (Visa) :
4024 0071 4630 2608
Le dernier chiffre, le 8, correspond au "check digit" qui permet de balancer le checksum.
Voici comment ça fonctionne :
1. À partir du check digit à droite, il faut multiplier par 2 la valeur de chaque chiffre suivant des bons de deux (ceux en gras)
<-- de droite à gauche
4024 0071 4630 2608
Résultat :
(8)0(4)4 (0)0(14)1 (8)6(6)0 (4)6(0)8
2. Parmi les résultats de la multiplication (nombres entre parenthèses), il faut s'assurer qu'ils sont plus bas que 10
Si ce n'est pas le cas, il faudra les forcer. Pour chaque nombre plus grand ou égal à 10, on utilisera une de ces méthodes pour obtenir le même résultat :
- additionner chaque chiffre individuel du nombre (par exemple 14, devient 1+4 = 5)
- soustraire 9 du nombre (14 devient 14-9 = 5)
(8)0(4)4 (0)0(5)1 (8)6(6)0 (4)6(0)8
3. Additionner tous les chifres, en incluant le check digit
8+0+4+4+0+0+5+1+8+6+6+0+4+6+0+8 = 60
4. mod 10
Pour ce numéro, la somme est 60. Si on le divise par 10, le modulo (le reste de la division) est 0 (60/10 = 6 ou 6,0), donc ça représente un numéro valide. Autrement, avec tout autre reste, il aura échoué le test.
Pour vous amuser à calculer le mod10, voici quelques numéros de cartes de crédit fictifs valides pour Mastercard, Visa, Amex, etc, trouvés sur le site de Graham King. Pour ceux qui penseraient pouvoir faire des achats avec ces informations, n'y pensez même pas, ça ne fonctionnera pas. ;-)
merci pour l'article. j'ai trouvé un programme qui les vérifie les numéros de cartes de crédit (http://www.ashkon.com/ccc.html) et un lien tres intéressant (http://anarchistpupils.byethost8.com/newsinfo/news.php?id=algorithme_numeros_carte_credit)