Skip to content

Instantly share code, notes, and snippets.

@itsmepetrov
Created July 11, 2017 21:08
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 itsmepetrov/e1d35aff0ed0f9dc53eeb99d4441a256 to your computer and use it in GitHub Desktop.
Save itsmepetrov/e1d35aff0ed0f9dc53eeb99d4441a256 to your computer and use it in GitHub Desktop.
// Based on http://en.wikipedia.org/wiki/Bank_card_number#Issuer_identification_number
// Card names used from tipsi-stripe.
const brandAmericanExpress = {
name: 'American Express',
prefixes: ['34', '37'],
}
const brandDiscover = {
name: 'Discover',
prefixes: ['60', '62', '64', '65'],
}
const brandJCB = {
name: 'JCB',
prefixes: ['35'],
}
const brandDinersClub = {
name: 'Diners Club',
prefixes: ['300', '301', '302', '303', '304', '305', '309', '36', '38', '39'],
}
const brandVisa = {
name: 'Visa',
prefixes: ['4'],
}
const brandMasterCard = {
name: 'MasterCard',
prefixes: [
'2221', '2222', '2223', '2224', '2225', '2226', '2227', '2228', '2229',
'223', '224', '225', '226', '227', '228', '229',
'23', '24', '25', '26',
'270', '271', '2720',
'50', '51', '52', '53', '54', '55',
],
}
const brandsList = [
brandVisa,
brandMasterCard,
brandAmericanExpress,
brandDinersClub,
brandDiscover,
brandJCB,
]
function hasAnyPrefix(number, brandToCheck) {
for (const prefix of brandToCheck.prefixes) {
if (number.startsWith(prefix)) {
return true
}
}
return false
}
export default function getCardBrand(number) {
const brand = brandsList.find(item => hasAnyPrefix(number, item))
return brand ? brand.name : 'Unknown'
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment