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,
     ...