Skip to content

Instantly share code, notes, and snippets.

@alexpvieira
Last active September 13, 2019 16:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save alexpvieira/9629e62c6d68ff2700a8efe42ee42758 to your computer and use it in GitHub Desktop.
Save alexpvieira/9629e62c6d68ff2700a8efe42ee42758 to your computer and use it in GitHub Desktop.
let brands = {};
brands["elo"] = {
regexpBin: /^401178|^401179|^431274|^438935|^451416|^457393|^457631|^457632|^504175|^627780|^636297|^636368|^(506699|5067[0-6]\d|50677[0-8])|^(50900\d|5090[1-9]\d|509[1-9]\d{2})|^65003[1-3]|^(65003[5-9]|65004\d|65005[0-1])|^(65040[5-9]|6504[1-3]\d)|^(65048[5-9]|65049\d|6505[0-2]\d|65053 [0-8])|^(65054[1-9]|6505[5-8]\d|65059[0-8])|^(65070\d|65071[0-8])|^65072[0-7]|^(65090[1-9]|65091\d|650920)|^(65165[2-9]|6516[6-7]\d)|^(65500\d|65501\d)|^(65502[1-9]|6550[3-4]\d|65505[0-8])/,
regexpFull: /^(401178|401179|431274|438935|451416|457393|457631|457632|504175|627780|636297|636368|(506699|5067[0-6]\d|50677[0-8])|(50900\d|5090[1-9]\d|509[1-9]\d{2})|65003[1-3]|(65003[5-9]|65004\d|65005[0-1])|(65040[5-9]|6504[1-3]\d)|(65048[5-9]|65049\d|6505[0-2]\d|65053[0-8])|(65054[1-9]| 6505[5-8]\d|65059[0-8])|(65070\d|65071[0-8])|65072[0-7]|(65090[1-9]|65091\d|650920)|(65165[2-9]|6516[6-7]\d)|(65500\d|65501\d)|(65502[1-9]|6550[3-4]\d|65505[0-8]))[0-9]{10,12}/,
regexpCvv: /^\d{3}$/,
};
brands["dinners"] = {
regexpBin: /^3(?:0[0-5]|[68][0-9])/,
regexpFull: /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/,
regexpCvv: /^\d{3}$/
};
brands["discover"] = {
regexpBin: /^6(?:011|5[0-9]{2})/,
regexpFull: /^6(?:011|5[0-9]{2})[0-9]{12}$/,
regexpCvv: /^\d{3}$/
};
brands["hipercard"] = {
regexpBin: /^3841[046]0|^60/,
regexpFull: /^(38[0-9]{17}|60[0-9]{14})$/,
regexpCvv: /^\d{3}$/
};
brands["amex"] = {
regexpBin: /^3[47]/,
regexpFull: /^3[47][0-9]{13}$/,
regexpCvv: /^\d{3,4}$/
};
brands["aura"] = {
regexpBin: /^50[0-9]/,
regexpFull: /^50[0-9]{14,17}$/,
regexpCvv: /^\d{3}$/
};
brands["mastercard"] = {
regexpBin: /^5[1-5][0-9][0-9]/,
regexpFull: /^5[1-5][0-9]{14}$/,
regexpCvv: /^\d{3}$/
};
brands["visa"] = {
regexpBin: /^4/,
regexpFull: /^4[0-9]{12}(?:[0-9]{3})?$/,
regexpCvv: /^\d{3}$/
};
function validateNumber(brand, card) {
return brands[brand].regexpFull.test(Number(card))
}
export default function getBrand(card) {
let results = new Array()
if (validateNumber('mastercard', card)) results.push('mastercard')
if (validateNumber('visa', card)) results.push('visa')
if (validateNumber('amex', card)) results.push('amex')
if (validateNumber('elo', card)) results.push('elo')
if (validateNumber('dinners', card)) results.push('dinners')
if (validateNumber('discover', card)) results.push('discover')
if (validateNumber('aura', card)) results.push('aura')
if (validateNumber('hipercard', card)) results.push('hipercard')
if(results.length==1) return results[0]
return null
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment