Skip to content

Instantly share code, notes, and snippets.

@franklinjavier
Forked from alexpvieira/Get Card Brand
Created August 24, 2018 17:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save franklinjavier/4bc792358c207ed5813bfa8b56aebf51 to your computer and use it in GitHub Desktop.
Save franklinjavier/4bc792358c207ed5813bfa8b56aebf51 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