UNPKG

react-card-brand

Version:

> A zero-dependency React Hook to show and get the brand from a card type.

85 lines (84 loc) 2.45 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getCardBrand = exports.CardType = void 0; var CardType; (function (CardType) { CardType["Amex"] = "amex"; CardType["Diners"] = "diners"; CardType["Discover"] = "discover"; CardType["Jcb"] = "jcb"; CardType["Mastercard"] = "mastercard"; CardType["Unionpay"] = "unionpay"; CardType["Visa"] = "visa"; })(CardType || (exports.CardType = CardType = {})); const options = { amex: { size: [15], prefixes: ['34', '37'] }, diners: { size: [14], prefixes: ['300', '301', '302', '303', '304', '305', '36', '38'], }, discover: { size: [16], prefixes: ['6011', '644', '645', '646', '647', '648', '649', '65'], }, jcb: { size: [16], prefixes: ['3528', '3529', '353', '354', '355', '356', '357', '358'], }, mastercard: { size: [16], prefixes: ['51', '52', '53', '54', '55'] }, unionpay: { size: [16, 17, 18, 19], prefixes: [ '622126', '622127', '622128', '622129', '62213', '62214', '62215', '62216', '62217', '62218', '62219', '6222', '6223', '6224', '6225', '6226', '6227', '6228', '62290', '62291', '622920', '622921', '622922', '622923', '622924', '622925', ], }, visa: { size: [13, 16], prefixes: ['4'] }, }; /** * Returns the card type based on the card number * Accepts different formats of card number: * - 4242 4242 4242 4242 * - 4242-4242-4242-4242 * - 4242424242424242 * @param cardNumber {string} - The card number to be validated * @returns The card type name */ const getCardBrand = (cardNumber) => { const formattedNumber = cardNumber.replace(/[ -]/g, ''); // Removing spaces from the card number for (const [option, config] of Object.entries(options)) { const { size, prefixes } = config; if (size.includes(formattedNumber.length)) { const testCard = new RegExp(`^(${prefixes.join('|')})`); if (testCard.test(formattedNumber)) { return option; } } } return 'unknown'; }; exports.getCardBrand = getCardBrand;