Regex numéro de carte Discover
Le bulletin de conformité de Discover Global Network (février 2017) liste les plages d'IIN acceptées par son réseau : 6011 (par sous-plages de 8 chiffres), 644 à 659, avec 16 à 19 chiffres. Les tentatives relues ne couvrent pas cela : regular-expressions.info n'accepte que 16 chiffres et ignore 644-649, validator.js accepte 16 à 19 chiffres mais aussi ignore 644-649, Cleave.js ne teste que le préfixe, et php-credit-card-validator accepte tout « 60 », « 64 » ou « 65 ». Voici un motif sur les préfixes 6011, 644-649 et 65 avec 16 à 19 chiffres, comparé à ces tentatives.
/^(?:6011|64[4-9][0-9]|65[0-9]{2})[0-9]{12,15}$/passe 24/24 cas
Comparatif des patterns existants
| Source | pattern | Score sur le corpus | ReDoS |
|---|---|---|---|
| regular-expressions.info — 16 chiffres seulement et plage 644-649 absente | ^6(?:011|5[0-9]{2})[0-9]{12}$ | 19 / 24 | sûr |
| 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 | sûr |
| 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 | sûr |
| php-credit-card-validator — « 60 », « 64 », « 65 » ou « 622 » : 6010, 643 ou 6221 passent, longueur libre | ^6([045]|22) | 16 / 24 | sûr |
Implémentation
const re = new RegExp("^(?:6011|64[4-9][0-9]|65[0-9]{2})[0-9]{12,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 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.