Regex Discover card number
Discover Global Network's February 2017 compliance bulletin lists the IIN ranges its network accepts: 6011 (in 8-digit sub-ranges), 644 to 659, with 16 to 19 digits. The attempts I read don't cover that: regular-expressions.info accepts only 16 digits and ignores 644-649, validator.js accepts 16 to 19 digits but also ignores 644-649, Cleave.js only tests the prefix, and php-credit-card-validator accepts any '60', '64' or '65'. Here's a pattern on prefixes 6011, 644-649 and 65 with 16 to 19 digits, compared against those attempts.
/^(?:6011|64[4-9][0-9]|65[0-9]{2})[0-9]{12,15}$/passes 24/24 cases
Comparison of existing patterns
| Source | pattern | Score on the corpus | ReDoS |
|---|---|---|---|
| regular-expressions.info — 16 chiffres seulement et plage 644-649 absente | ^6(?:011|5[0-9]{2})[0-9]{12}$ | 19 / 24 | safe |
| validator.js (isCreditCard) — accepte 16 à 19 chiffres mais la plage 644-649 manque | ^6(?:011|5[0-9][0-9])[0-9]{12,15}$ | 22 / 24 | safe |
| Cleave.js — motif de saisie progressive : « 65 » seul, 15 chiffres ou 20 chiffres passent (pas d'ancre de fin) | ^(?:6011|65\d{0,2}|64[4-9]\d?)\d{0,12} | 19 / 24 | safe |
| php-credit-card-validator — « 60 », « 64 », « 65 » ou « 622 » : 6010, 643 ou 6221 passent, longueur libre | ^6([045]|22) | 16 / 24 | safe |
Implementation
const re = new RegExp("^(?:6011|64[4-9][0-9]|65[0-9]{2})[0-9]{12,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 liste des sous-plages 8 chiffres plus fines pour 6011 (par exemple 60115000-60116999 n'y figure pas) : ce motif est plus large que la liste officielle, mais accepte le numéro de test Stripe habituel.
- Les plages 622126-622925 (UnionPay) et 3528-3589 (JCB) sont acceptées par le réseau Discover mais restent des cartes d'autres marques : voir les fiches dédiées. Plage 65 : elle contient aussi des cartes d'autres réseaux.
- Ne stockez ni ne journalisez de vrais numéros de carte (PCI DSS) ; n'utilisez que des numéros de test dans vos tests.