Je teste une application où le motif Regex correspond à la carte de crédit, puis ces numéros doivent être mis en évidence. J'utilise le site http://regexpal.com/ pour créer des numéros de carte de crédit de test pour mes tests. mon exigence est d’avoir des numéros de carte de crédit valides pouvant contenir "-" et/ou "," entre eux.
J'ai besoin de quelques numéros de crédit avec les scénarios ci-dessous
Expressions régulières du vendeur de cartes de crédit courantes:
^3[47][0-9]{13}$
^(6541|6556)[0-9]{12}$
^389[0-9]{11}$
^3(?:0[0-5]|[68][0-9])[0-9]{11}$
^65[4-9][0-9]{13}|64[4-9][0-9]{13}|6011[0-9]{12}|(622(?:12[6-9]|1[3-9][0-9]|[2-8][0-9][0-9]|9[01][0-9]|92[0-5])[0-9]{10})$
^63[7-9][0-9]{13}$
^(?:2131|1800|35\d{3})\d{11}$
^9[0-9]{15}$
^(6304|6706|6709|6771)[0-9]{12,15}$
^(5018|5020|5038|6304|6759|6761|6763)[0-9]{8,15}$
^(5[1-5][0-9]{14}|2(22[1-9][0-9]{12}|2[3-9][0-9]{13}|[3-6][0-9]{14}|7[0-1][0-9]{13}|720[0-9]{12}))$
^(6334|6767)[0-9]{12}|(6334|6767)[0-9]{14}|(6334|6767)[0-9]{15}$
^(4903|4905|4911|4936|6333|6759)[0-9]{12}|(4903|4905|4911|4936|6333|6759)[0-9]{14}|(4903|4905|4911|4936|6333|6759)[0-9]{15}|564182[0-9]{10}|564182[0-9]{12}|564182[0-9]{13}|633110[0-9]{10}|633110[0-9]{12}|633110[0-9]{13}$
^(62[0-9]{14,17})$
^4[0-9]{12}(?:[0-9]{3})?$
^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14})$
Pour une carte de débit Rupay: ^6[0-9]{15}$
Carte Regx pour Rupay:
(508 [5-9] [0-9] {12}) | (6069 [8-9] [0-9] {11}) | (607 [0-8] [0-9] {12}) | (6079 [0-8] [0-9] {11}) | (608 [0-5] [0-9] {12}) | (6521 [5-9] [0-9] {11} ) | (652 [2-9] [0-9] {12}) | (6530 [0-9] {12}) | (6531 [0-4] [0-9] {11})
en utilisant la série de bacs: 508500 - 508999, 606985 - 606999, 607000 - 607899, 607900 - 607984, 608001 - 608500, 652200 --- 652999, 653000 --- 653099, 653100 --- 653149,
En plus de tout ce qui précède, voici une regex pour les nouvelles MasterCard, qui comprend 2221-2720 BIN:
^5[1-5][0-9]{0,14}|^(222[1-9]|2[3-6]\\d{2}|27[0-1]\\d|2720)[0-9]{0,12}
Notez que cette expression régulière correspondra si l'utilisateur commence à taper les chiffres de la carte, qui correspondent à MasterCard. Par exemple, si l'utilisateur tape "222185" , l'expression rationnelle correspondra, car aucun autre type de carte ne commence par "2221" . Cette regex peut s'avérer utile si vous souhaitez afficher le type de carte lors de la saisie des premiers chiffres de la carte.
Sinon, si vous voulez "post factum" matching, vous pouvez changer la dernière partie de {0,14}
et {0,12}
à {14}
et {12}
:
^5[1-5][0-9]{14}|^(222[1-9]|2[3-6]\\d{2}|27[0-1]\\d|2720)[0-9]{12}
Regex pour les principaux réseaux de cartes
Master Card (2-Bin, 5-Bin les deux): "(?: 5 [1-5] [0-9] {2} | 222 [1-9] | 22 [3-9] [ 0-9] | 2 [3-6] [0-9] {2} | 27 [01] [0-9] | 2720) [0-9] {12} "
Visa : "^ 4 [0-9] {6,} $"
Diner's Club : "(^ 30 [0-5] [0-9] {11} $) | (^ (36 | 38) [0-9] {12} $)"
American Express : "^ [34 | 37] [0-9] {14} $"
JCB: "(^ 3 [0-9] {15} $) | (^ (2131 | 1800) [0-9] {11} $)"
Découvrez : "^ 6011 -?\D {4} -?\D {4} -?\D {4} $"
Je suis venu avec une regex qui permet des tirets et des espaces. Testez-le ici: https://regex101.com/r/Rx2iWD/1
Pour permettre les virgules (ce qui me semble inhabituel), ajoutez-le simplement à la définition sep
.
En PHP:
$ccPatt = '/
(?(DEFINE)
(?<sep> [ -]?)
)
(?<!\d)(?:
\d{4} (?&sep) \d{4} (?&sep) \d{4} (?&sep) \d{4} # 16 digits
| \d{3} (?&sep) \d{3} (?&sep) \d{3} (?&sep) \d (?&sep) \d{3} # 13 digits
| \d{4} (?&sep) \d{6} (?&sep) \d{4} # 14 digits
| \d{4} (?&sep) \d{6} (?&sep) \d{5} # 15 digit card
)(?!\d)
/xu';
First Data valide 15 chiffres pour Amex et 16 pour Visa, MC, Discover, Diners et jcb. Je ne leur envoie donc le numéro de carte que si le numéro comporte 15 ou 16 chiffres:
^[0-9]{15}(?:[0-9]{1})?$