Format Take 2
by TokenEx Support
HTML
<input type="text" id="data" />
JavaScript
data = document.getElementById("data");
data.onkeypress = restrictNumeric;
data.onkeypress = restrictCardNumber;
data.onkeypress = formatCardNumber;
data.onkeydown = formatBackCardNumber;
data.onpaste = reFormatCardNumber;
data.onchange = reFormatCardNumber;
data.oninput = reFormatCardNumber;
//https://github.com/stripe/jquery.payment/blob/master/lib/jquery.payment.js
function arrayContains(needle, arrhaystack) {
return (arrhaystack.indexOf(needle) > -1);
}
function getCardType(creditCardNumber) {
var type;
if (creditCardNumber.match(/^3[47]\d{13}$/)) {
type = "americanExpress";
} else if (creditCardNumber.match(/^(6011|65\d{2}|64[4-9]\d)\d{12}|^(62\d{14})$/)) {
type = "discover";
} else if (creditCardNumber.match(/^(5[1-5]\d{4}|677189|222[1-9]\d{2}|22[3-9]\d{3}|2[3-6]\d{4}|27[01]\d{3}|2720\d{2})\d{10}$/)) {
type = "masterCard";
} else if (creditCardNumber.match(/^4\d{12}(\d{3})?(\d{3})?$/)) {
type = "visa";
} else if (creditCardNumber.match(/^3(0[0-5]|[68]\d)\d{11}$/)) {
type = "diners";
} else if (creditCardNumber.match(/^35(28|29|[3-8]\d)\d{12}$/)) {
type = "jcb";
} else if (creditCardNumber.match(/^\d{13,19}$/)) {
type = "unknown";
} else {
type = "invalid";
}
return type;
}
var defaultFormat = /(\d{1,4})/g;
var newCards[{
type: "visa",
possiblePattern: "",
validPattern: "",
formats: [4,4,4,4],
cvvLength: 4,
luhn: true
}];
var cards = [{
type: 'visa',
patterns: [4],
format: defaultFormat,
length: [13, 16],
cvcLength: [3],
luhn: true
}, {
type: 'mastercard',
patterns: [51, 52, 53, 54, 55, 22, 23, 24, 25, 26, 27],
format: defaultFormat,
length: [16],
cvcLength: [3],
luhn: true
}, {
type: 'amex',
patterns: [34, 37],
format: /(\d{1,4})(\d{1,6})?(\d{1,5})?/,
length: [15],
cvcLength: [3, 4],
luhn: true
}, {
type: 'jcb',
patterns: [35],
format: defaultFormat,
...