Rexact
Cheatsheet

Regex numéro de carte Diners Club

Diners Club International occupe les plages 300-305, 3095, 36, 38 et 39 d'après le bulletin Discover Global Network (février 2017), avec 14 à 19 chiffres (minimum 14 seulement pour 36 dans ce bulletin ; les autres plages y démarrent à 16). Les tentatives relues ne suivent pas cela : regular-expressions.info fige 14 chiffres et omet 39 et 3095, Cleave.js ne teste que le préfixe, et php-credit-card-validator accepte tout « 30 », par exemple 3060 ou 3099. Voici un motif sur ces plages avec 14 à 19 chiffres, comparé à ces tentatives.

/^(?:30[0-5][0-9]|3095|36[0-9]{2}|3[89][0-9]{2})[0-9]{10,15}$/
passe 22/22 cas

Comparatif des patterns existants

Implémentation

const re = new RegExp("^(?:30[0-5][0-9]|3095|36[0-9]{2}|3[89][0-9]{2})[0-9]{10,15}$", "");
re.test(input);

Limites

  • Valide seulement la FORME (préfixe et longueur) : ni la clé de Luhn (le corpus contient un numéro de forme correcte et de clé fausse qui passe), ni l'existence du compte, ni la date d'expiration ou le CVV. Les espaces et tirets sont refusés : normalisez avant validation.
  • Le bulletin de Discover donne 16 à 19 chiffres (et non 14) pour 300-305, 3095, 38 et 39 : les numéros de test à 14 chiffres de Stripe/PayPal en 300-305 et 36 sont acceptés ici. Les cartes Diners Club d'Amérique du Nord (préfixe 55, 16 chiffres) sont traitées comme Mastercard.
  • Ne stockez ni ne journalisez de vrais numéros de carte (PCI DSS) ; n'utilisez que des numéros de test dans vos tests.

Pages liées