Last active
May 5, 2020 11:30
-
-
Save buroz/8a83fb01bb55e069ee32f0dfce6772a7 to your computer and use it in GitHub Desktop.
Credit Card Regex
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
enum CreditCardType { | |
VISA = "visa", | |
MASTERCARD = "mastercard", | |
DISCOVER = "discover", | |
AMERICANEXPRESS = "american-express", | |
DINERSCLUB = "diners-club", | |
JCB = "jcb", | |
TROY = "troy" | |
} | |
const validateCardNumber = (cardnumber: string) => { | |
const types = ["visa", "mastercard", "discover", "american-express", "diners-club", "jcb", "troy"]; | |
return new Promise((resolve, reject) => { | |
cardnumber = cardnumber.replace(/[ -]/g, ""); | |
const match = /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))|((?:9792|65[0-9]{2}|36|2205)[0-9]{12})$/.exec( | |
cardnumber | |
); | |
if (match) { | |
for (var i = 1; i < match.length; i++) { | |
if (match[i]) { | |
resolve(types[i - 1]); | |
} | |
} | |
} else { | |
reject("invalid card"); | |
} | |
}); | |
}; | |
/* | |
Amex Card: ^3[47][0-9]{13}$ | |
BCGlobal: ^(6541|6556)[0-9]{12}$ | |
Carte Blanche Card: ^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})$ | |
Insta Payment Card: ^63[7-9][0-9]{13}$ | |
JCB Card: ^(?:2131|1800|35\d{3})\d{11}$ | |
KoreanLocalCard: ^9[0-9]{15}$ | |
Laser Card: ^(6304|6706|6709|6771)[0-9]{12,15}$ | |
Maestro Card: ^(5018|5020|5038|5893|6304|6759|6761|6762|6763)[0-9]{8,15}$ | |
Mastercard: ^5[1-5][0-9]{14}$ | |
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})$ | |
*/ | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment