Rexact
Cheatsheet

Regex Diners Club card number

Diners Club International holds ranges 300-305, 3095, 36, 38 and 39 according to the Discover Global Network bulletin (February 2017), with 14 to 19 digits (that bulletin gives a 14-digit minimum only for 36; the other ranges start at 16). The attempts I read don't follow that: regular-expressions.info fixes 14 digits and omits 39 and 3095, Cleave.js only tests the prefix, and php-credit-card-validator accepts any '30', such as 3060 or 3099. Here's a pattern on those ranges with 14 to 19 digits, compared against those attempts.

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

Comparison of existing patterns

Implementation

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);

Limits

  • 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.

Related pages