A general purpose javascript library for credit card number validation and formatting. Based on and Usable in React Native and Node.

Downloads in past


1.0.08 years ago8 years agoMinified + gzip package size for creditcardutils in KB


Build Status Dependencies
A general purpose javascript library for credit card number validation and formatting. Based on jondavidjohn/payform and jquery.payment. Usable in React Native and Node.
Supported card types:
  • Visa
  • MasterCard
  • American Express
  • Diners Club
  • Discover
  • UnionPay
  • JCB
  • Visa Electron
  • Maestro
  • Forbrugsforeningen
  • Dankort

(Custom card types are also supported)

Installation / Usage

npm (Node and Browserify)

npm install creditcardutils --save

var creditcardutils = require('creditcardutils');

// Format input for card number 
creditcardutils.formatCardNumber(input); //=> returns formatted card number

// Validate a credit card number
creditcardutils.validateCardNumber('4242 4242 4242 4242'); //=> true

// Get card type from number
creditcardutils.parseCardType('4242 4242 4242 4242'); //=> 'visa'


General Formatting and Validation


Formats card numbers:
  • Includes a space between every 4 digits
  • Restricts input to numbers
  • Limits to 16 numbers
  • Supports American Express formatting

creditcardutils.formatCardNumber(input); //=>returns formatted card number


Validates a card number:
  • Validates numbers
  • Validates Luhn algorithm
  • Validates length

creditcardutils.validateCardNumber('4242 4242 4242 4242'); //=> true

creditcardutils.validateCardExpiry(month, year)

Validates a card expiry:
  • Validates numbers
  • Validates in the future
  • Supports year shorthand

creditcardutils.validateCardExpiry('05', '20'); //=> true
creditcardutils.validateCardExpiry('05', '2015'); //=> true
creditcardutils.validateCardExpiry('05', '05'); //=> false

creditcardutils.validateCardCVC(cvc, type)

Validates a card CVC:
  • Validates number
  • Validates length to 4

creditcardutils.validateCardCVC('123'); //=> true
creditcardutils.validateCardCVC('123', 'amex'); //=> true
creditcardutils.validateCardCVC('1234', 'amex'); //=> true
creditcardutils.validateCardCVC('12344'); //=> false


Returns a card type. Either:
  • visa
  • mastercard
  • amex
  • dinersclub
  • discover
  • unionpay
  • jcb
  • visaelectron
  • maestro
  • forbrugsforeningen
  • dankort

The function will return null if the card type can't be determined.
creditcardutils.parseCardType('4242 4242 4242 4242'); //=> 'visa'
creditcardutils.parseCardType('hello world?'); //=> null


Parses a credit card expiry in the form of MM/YYYY, returning an object containing the month and year. Shorthand years, such as 13 are also supported (and converted into the longhand, e.g. 2013).
creditcardutils.parseCardExpiry('03 / 2025'); //=> {month: 3: year: 2025}
creditcardutils.parseCardExpiry('05 / 04'); //=> {month: 5, year: 2004}

This function doesn't perform any validation of the month or year; use creditcardutils.validateCardExpiry(month, year) for that.

Custom Cards

Array of objects that describe valid card types. Each object should contain the following fields:
  // Card type, as returned by creditcardutils.parseCardType.
  type: 'mastercard',
  // Regex used to identify the card type. For the best experience, this should be
  // the shortest pattern that can guarantee the card is of a particular type.
  pattern: /^5[0-5]/,
  // Array of valid card number lengths.
  length: [16],
  // Array of valid card CVC lengths.
  cvcLength: [3],
  // Boolean indicating whether a valid card number should satisfy the Luhn check.
  luhn: true,
  // Regex used to format the card number. Each match is joined with a space.
  format: /(\d{1,4})/g

When identifying a card type, the array is traversed in order until the card number matches a pattern. For this reason, patterns with higher specificity should appear towards the beginning of the array.


Please see