Ce que vérifie le validateur
Trois éléments d’un numéro de carte peuvent être contrôlés sans interroger la moindre banque. Le validateur les examine tous les trois et affiche le résultat de chacun :
- Plage de l’émetteur (IIN). Les premiers chiffres identifient le réseau : 4 pour Visa, 51–55 ou 2221–2720 pour Mastercard, 34 ou 37 pour American Express, 6011/644–649/65 pour Discover, 3528–3589 pour JCB, etc.
- Longueur. Chaque réseau autorise des longueurs précises : 15 chiffres pour l’Amex, 14 pour la plupart des Diners Club, 16 pour presque toutes les autres et jusqu’à 19 pour certaines cartes Visa, Discover, JCB, UnionPay et Maestro.
- Somme de contrôle de Luhn. Le dernier chiffre est une clé de contrôle. La formule de Luhn détecte toute erreur sur un seul chiffre et la plupart des inversions de deux chiffres voisins.
Si les trois contrôles sont concluants, le numéro est bien formé. C’est tout ce qu’un site peut savoir par lui-même : l’existence du compte, son statut et son solde ne sont connus que de la banque émettrice, qui les vérifie au moment de l’autorisation d’un paiement.
L’algorithme de Luhn pas à pas
Voici le calcul pour le numéro de test 4111 1111 1111 1111. On double un chiffre sur deux en partant de la droite ; lorsque le double dépasse 9, on lui retire 9. On additionne ensuite toutes les valeurs :
| Chiffre | 4 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Doublé ? | 8 | – | 2 | – | 2 | – | 2 | – | 2 | – | 2 | – | 2 | – | 2 | – |
| Valeur ajoutée | 8 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 | 2 | 1 |
Le total est de 30. Comme 30 est divisible par 10, le numéro est valide. Modifiez un seul chiffre et la somme change, elle n’est plus un multiple de 10 : essayez dans le validateur ci-dessus pour voir quelle clé de contrôle le numéro modifié devrait avoir.
Structure d’un numéro de carte
| Partie | Chiffres | Signification |
|---|---|---|
| Identifiant du secteur d’activité (MII) | Le 1er | Secteur : 3 voyages et loisirs, 4–5 banque et finance, 6 commerce et banque |
| Numéro d’identification de l’émetteur (IIN / BIN) | Les 6 à 8 premiers | Réseau et banque émettrice, type de carte (crédit, débit, prépayée) et pays |
| Identifiant du compte | Ceux du milieu | Attribué par l’émetteur à chaque carte |
| Clé de contrôle | Le dernier | Calculée avec l’algorithme de Luhn à partir de tous les autres |
Bien valider les numéros de carte dans votre propre formulaire
Quelques règles simples rendent la saisie d’un numéro de carte plus fiable et plus agréable pour vos utilisateurs :
- Nettoyez la saisie d’abord : supprimez les espaces et les tirets avant toute vérification, car beaucoup de clients recopient le numéro tel qu’il est imprimé sur la carte.
- Contrôlez la longueur et l’IIN avant Luhn, et affichez un message d’erreur précis (« numéro trop court », « réseau non accepté ») plutôt qu’un simple « numéro invalide ».
- Validez pendant la frappe, sans bloquer les BIN inconnus : de nouvelles plages apparaissent régulièrement (la série 2 de Mastercard, par exemple) et les cartes CB cobadgées doivent passer sans encombre.
- Gardez en tête que Luhn ne contrôle que le format : c’est la passerelle de paiement, puis la banque émettrice, qui décide si la transaction est acceptée.
- Ne journalisez ni ne stockez jamais de numéros complets en développement ou en préproduction (exigence PCI DSS) : utilisez des numéros de test à la place.
Quand utiliser un validateur de carte bancaire ?
- Pour comprendre pourquoi un formulaire de paiement refuse le numéro saisi par un client.
- Pour contrôler des fixtures et des données de test avant de les importer.
- Pour comparer votre propre code de validation à une implémentation de référence.
- Pour comprendre comment sont construits les numéros de carte, et l’expliquer en cours.
Si vous avez besoin de numéros pour vos tests, le générateur de carte bancaire crée des lots de jusqu’à 1 000 cartes de test avec date d’expiration et CVV, prêts à exporter en CSV, JSON ou XML. Gardez à l’esprit que, même s’ils passent cette vérification, il s’agit de données fictives : aucune passerelle en production ne les acceptera comme moyen de paiement.
Questions fréquentes
Un résultat valide signifie-t-il que la carte existe ?
Non. Le validateur ne contrôle que le format. Seule la banque émettrice peut confirmer qu’un compte existe, qu’il est actif ou approvisionné, et elle ne le fait qu’au moment d’autoriser un paiement.
Puis-je coller ici un vrai numéro sans risque ?
La vérification est faite en JavaScript sur votre appareil et le numéro n’est jamais transmis à notre serveur. Par principe, évitez toutefois de saisir de vrais numéros de carte sur un site quand ce n’est pas nécessaire.
Quelles erreurs l’algorithme de Luhn détecte-t-il ?
Il repère toute erreur portant sur un seul chiffre et la plupart des inversions de deux chiffres voisins. C’est pourquoi les formulaires l’utilisent pour signaler une faute de frappe avant même l’envoi du paiement.
Pourquoi mon numéro est-il déclaré non valide ?
Le plus souvent, c’est une faute de frappe : un seul chiffre erroné suffit à fausser la somme de Luhn. Le validateur indique la clé de contrôle que le numéro devrait avoir, ce qui permet de repérer l’écart immédiatement.