Test del numero di carta di credito Regex

Sto testando un’applicazione in cui il modello Regex combacia con la carta di credito, quindi tali numeri dovrebbero essere evidenziati. Sto usando il sito http://regexpal.com/ per creare numeri di carte di credito di credito di prova per i miei test. il mio requisito è quello di avere numeri di carta di credito validi che possono avere “-” e / o “,” tra di loro. Non ho avuto successo a build un numero tale come quando lo collaudo usando il sito

http://regexpal.com .

Ho bisogno di pochi numeri di credito con gli scenari qui sotto

  1. numero di carta di credito valido che può avere “-” tra qualsiasi cifra.
  2. numero di carta di credito valido che può avere “,” tra qualsiasi cifra.
  3. numero di carta di credito valido che può avere cobination di “,” o “-” tra qualsiasi cifra.

    Rimuovi tutto e - e altre non cifre dalla stringa prima.

    Quindi usa questa regex che corrisponde alle carte Visa, MasterCard, American Express, Diners Club, Discover e JCB:

    ^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$

    Espressioni regolari del venditore comune di carte di credito:

    • Carta Amex: ^3[47][0-9]{13}$
    • BCGlobal: ^(6541|6556)[0-9]{12}$
    • Carte Blanche: ^389[0-9]{11}$
    • Diners Club Card: ^3(?:0[0-5]|[68][0-9])[0-9]{11}$
    • Discover Card: ^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})$
    • Carta di pagamento Insta: ^63[7-9][0-9]{13}$
    • JCB Card: ^(?:2131|1800|35\d{3})\d{11}$
    • KoreanLocalCard: ^9[0-9]{15}$
    • Scheda laser: ^(6304|6706|6709|6771)[0-9]{12,15}$
    • Carta Maestro: ^(5018|5020|5038|6304|6759|6761|6763)[0-9]{8,15}$
    • Mastercard: ^(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}))$
    • Solo Card: ^(6334|6767)[0-9]{12}|(6334|6767)[0-9]{14}|(6334|6767)[0-9]{15}$
    • Switch Card: ^(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}$
    • Union Pay Card: ^(62[0-9]{14,17})$
    • Visa Card: ^4[0-9]{12}(?:[0-9]{3})?$
    • Visa Master Card: ^(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14})$

    Per la carta di debito Rupay: ^6[0-9]{15}$

    La risposta accettata è ottima, ma per accogliere la nuova MasterCard BIN, credo che avrebbe bisogno di essere aggiornata per:

    ^(?:4[0-9]{12}(?:[0-9]{3})?|[25][1-7][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\d{3})\d{11})$

    (il pezzo critico è [25][1-7][0-9]{14} , dal momento che la prima cifra può ora essere un 2 o un 5 e la seconda cifra può essere fino a 7)

    Per favore correggimi se sbaglio!

    Regx per carta 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})

    utilizzando serie bin: 508500 – 508999, 606985 – 606999, 607000 – 607899, 607900 – 607984, 608001 – 608500, 652150 — 652199, 652200 — 652999, 653000 — 653099, 653100 — 653149,

    First Data convalida 15 cifre per Amex e 16 per visa, mc, discover, diners e jcb, quindi inviamo loro il numero solo se il numero è composto da 15 o 16 cifre utilizzando questo:

     ^[0-9]{15}(?:[0-9]{1})?$ 

    Oltre a tutto quanto sopra, ecco una regex per le nuove MasterCard, che include 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} 

    Nota, questa regex corrisponderà se l’utente inizia a digitare cifre di carta, che corrispondono a MasterCard. Ad esempio, se l’utente digita “222185”, la regex corrisponderà, perché non esiste un altro tipo di tessera che inizi con “2221” . Questa regex potrebbe rivelarsi utile se si desidera visualizzare il tipo di scheda durante la digitazione delle prime cifre della carta.

    In alternativa, se desideri la corrispondenza “post factum” , puoi modificare l’ultima parte da {0,14} e {0,12} a {14} e {12} :

     ^5[1-5][0-9]{14}|^(222[1-9]|2[3-6]\\d{2}|27[0-1]\\d|2720)[0-9]{12} 

    Mi è venuta una regex che consente trattini e spazi. Provalo qui: https://regex101.com/r/Rx2iWD/1

    Per consentire virgole (che ritengo sia inusuale), aggiungilo alla definizione sep .

    In PHP:

     $ccPatt = '/ (?(DEFINE) (? [ -]?) ) (?< !\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'; 

    Regex per reti di carte leader

    Master Card (2-Bin, 5-Bin entrambi): “(?: 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}”

    Visto : “^ 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} $)”

    Scopri : “^ 6011 -? \ D {4} -? \ D {4} -? \ D {4} $”