web-dev-qa-db-fra.com

Comment un site Web sait-il si un certain numéro de carte de crédit est erroné instantanément

Je renouvelais mon abonnement Internet via le portail en ligne de mon FAI. Ce qui m'a frappé, c'est quand je saisissais les détails de ma carte de crédit, je saisissais le type de ma carte de crédit (MasterCard, Visa, AA, etc.), et quand je saisissais les chiffres, il y avait un chiffre que j'avais mal saisi. Lorsque j'ai appuyé sur le bouton Envoyer, le site Web m'a automatiquement signalé une erreur indiquant que le numéro de carte que j'avais entré n'était pas valide. Je sens que cela a été fait localement dans le navigateur et aucune donnée n'a été poussée et vérifiée sur un serveur et renvoyée une réponse.

Ma question est la suivante: existe-t-il une séquence de numéros de chaque fournisseur? Sinon, comment le site Web pourrait-il (localement) connaître le mauvais numéro?

45
tony9099

Somme de contrôle

Les numéros CC, ainsi que pratiquement tous les autres numéros importants bien conçus (par exemple, les numéros de compte dans les banques) ont tendance à inclure une somme de contrôle pour vérifier l'intégrité du numéro. Bien qu'il ne s'agisse pas d'une fonction de sécurité (car il est trivial de calculer), un algorithme de somme de contrôle décent peut garantir de toujours échouer si (a) une seule faute de frappe a été faite ou (b) deux chiffres voisins sont échangés, qui sont les deux erreurs les plus courantes lors de la manipulation manuelle. saisir des nombres longs.

http://rosettacode.org/wiki/Luhn_test_of_credit_card_numbers est un exemple d'un tel test.

Émetteur

Si un numéro CC est techniquement correct, il peut ne pas s'agir d'un vrai numéro CC. La méthode pour vérifier cela est simple et compliquée à la fois - généralement, si vous avez un accès approprié, vous pouvez rechercher l'institution émettrice pour chaque plage de numéros de carte, puis vous demandez à l'émetteur [s systèmes de cartes] si ils pensent que c'est une carte valide. Eh bien, la deuxième partie se produit généralement dans le cadre d'un paiement CC, mais la vérification de l'émetteur est parfois effectuée avant cela comme un test étendu; mais pas sur le navigateur client.

71
Peteris

Aux États-Unis, ils utilisent l'algorithme de Luhn:

http://en.wikipedia.org/wiki/Luhn_algorithm

Comment l'algorithme vérifie un nombre:

  1. Du chiffre le plus à droite, qui est le chiffre de contrôle, en se déplaçant vers la gauche, doublez la valeur de chaque deuxième chiffre; si le produit de cette opération de doublage est supérieur à 9 (par exemple, 8 × 2 = 16), additionnez les chiffres des produits (par exemple, 16: 1 + 6 = 7, 18: 1 + 8 = 9).
  2. Prenez la somme de tous les chiffres.
  3. Si le total modulo 10 est égal à 0 (si le total se termine par zéro) alors le nombre est valide selon la formule de Luhn; sinon il n'est pas valide.

Comment calculer le chiffre de contrôle:

Le chiffre de contrôle est obtenu en calculant la somme des chiffres puis en calculant 9 fois cette valeur modulo 10. Sous forme d'algorithme:

  1. Calculez la somme des chiffres (après avoir doublé tous les deux chiffres).
  2. Multipliez par 9.
  3. Le dernier chiffre est le chiffre de contrôle.

Exemple:

Nombre: 4321-5678-7531-456x (où x est le chiffre de contrôle).

1. Number:              4   3   2   1   5   6   7   8   7   5   3   1   4   5   6   X
2. Double every second: 8       4      10      14      14       6       8      12
3. Sum digits >9:       8   3   4   1   1   6   5   8   5   5   6   1   8   5   3
4. Sum all digits:      8 + 3 + 4 + 1 + 1 + 6 + 5 + 8 + 5 + 5 + 6 + 1 + 8 + 5 + 3 = 69

5. Multiply sum by 9:   69 x 9 = 621
6. Take value mod 10:   621 mod 10 = 1  =>  x = 1

Le chiffre de contrôle est 1 et le numéro valide complet est 4321-5678-7531-4561.

Si vous deviez exécuter à nouveau l'algorithme pour vérifier le nombre, la somme de tous les chiffres de l'étape 4 serait 69 + 1 = 70. Alors, 70 mod 10 = 0, donc le nombre est valide selon l'algorithme.

38
EarlCrapstone
  1. De nombreux sites ont des contrôles côté client sur le CC #. Tous les numéros de carte de crédit ont à peu près la même longueur. (Comme le soulignent les commentateurs, il existe plusieurs longueurs. En général, les longueurs sont connues de l'implémenteur et il existe un petit ensemble.) Il existe des chaînes de nombres qui se rapportent à chaque fournisseur.
  2. Du point de vue de la sécurité, il vaut mieux également effectuer des vérifications côté serveur. Si vous êtes un testeur de stylo, ce serait quelque chose à vérifier. Si vous ne l'êtes pas, alors ne vous y attardez pas car vous pourriez avoir de gros ennuis.

https://www.mint.com/blog/trends/credit-card-code-01202011/

7
baordog

Juste pour être complet: l'algorithme de Luhn a un défaut mineur.

TL; DR: "l'algorithme de Luhn détecte la transposition des chiffres adjacents s'ils ne sont pas 09 ou 90"

Si d1 et d2 sont des chiffres adjacents dans le numéro de carte de crédit (d1! = D2), alors leur contribution à la somme de contrôle est soit f(d1) + d2 ou f(d2) + d1, et s'ils sont transposés, ils sont soit f(d2) + d1 ou f(d1) + d2. Si ces deux sommes sont identiques ou si leur différence est un multiple de 10, alors la somme de contrôle ne fait pas de distinction entre leur transposition.

"Credit Cards" 2007, dans An Introduction to the Mathematics of Money , Springer New York, NY, pp. 101-112.

La fonction f(d) est le doublement et la somme des chiffres qui peuvent être définis comme suit dans python pour les entiers d: def f(d): return sum([int(x) for x in str(2 * d)])

Il n'y a pas deux chiffres qui seront zéro mod 10 dans le scénario ci-dessus. La preuve est fastidieuse, mais elle peut être trouvée dans son intégralité dans la ressource suivante dont j'ai tiré la citation ci-dessus.

4
user68527

Sommes de contrôle, reconnaissance de plage de cartes et contrôles de longueur

La plupart (mais pas tous) des schémas de cartes utilisent le test Checksum (Luhn) décrit dans d'autres réponses. Cependant, en outre, certains algorithmes utilisent également (assez basique) la reconnaissance de plage de carte (CRR) basée sur le début du numéro de carte (AKA la plage). Certains vérifient également la longueur de la carte.

Voir par exemple les similitudes dans de nombreux algorithmes décrits sur: - https://stackoverflow.com/questions/72768/how-do-you-detect-credit-card-type-based-on-number

4
MikeRoger