creditcardutils
v1.0.0
Published
A general purpose javascript library for credit card number validation and formatting. Based on https://github.com/jondavidjohn/payform and https://github.com/stripe/jquery.payment. Usable in React Native and Node.
Downloads
19,194
Maintainers
Readme
creditcardutils
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'
API
General Formatting and Validation
creditcardutils.formatCardNumber(input)
Formats card numbers:
- Includes a space between every 4 digits
- Restricts input to numbers
- Limits to 16 numbers
- Supports American Express formatting
Example:
creditcardutils.formatCardNumber(input); //=>returns formatted card number
creditcardutils.validateCardNumber(number)
Validates a card number:
- Validates numbers
- Validates Luhn algorithm
- Validates length
Example:
creditcardutils.validateCardNumber('4242 4242 4242 4242'); //=> true
creditcardutils.validateCardExpiry(month, year)
Validates a card expiry:
- Validates numbers
- Validates in the future
- Supports year shorthand
Example:
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
Example:
creditcardutils.validateCardCVC('123'); //=> true
creditcardutils.validateCardCVC('123', 'amex'); //=> true
creditcardutils.validateCardCVC('1234', 'amex'); //=> true
creditcardutils.validateCardCVC('12344'); //=> false
creditcardutils.parseCardType(number)
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.
Example:
creditcardutils.parseCardType('4242 4242 4242 4242'); //=> 'visa'
creditcardutils.parseCardType('hello world?'); //=> null
creditcardutils.parseCardExpiry(string)
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
creditcardutils.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.
Development
Please see CONTRIBUTING.md.