assertions/creditCards.js

/**
 * @fileOverview Credit cards checks.
 * @module CreditCard
 */

const Interface = require('../interface');
let CreditCard = {};

/**
 * Check if is a valid credit card
 *
 * **Interfaces**: `all`, `any`, `not`, `err`
 *
 * @function
 * @name creditCard
 * @param value {string} version string
 * @returns {boolean}
 * @example
 * be.creditCard('4242424242424242') // true
 */
CreditCard.creditCard = (value) => {
    return /^(?:(4[0-9]{12}(?:[0-9]{3})?)|(5[1-5][0-9]{14})|(6(?:011|5[0-9]{2})[0-9]{12})|(3[47][0-9]{13})|(3(?:0[0-5]|[68][0-9])[0-9]{11})|((?:2131|1800|35[0-9]{3})[0-9]{11}))$/.test(value);
};

/**
 * Check if is a valid American Express credit card
 *
 * **Interfaces**: `all`, `any`, `not`, `err`
 *
 * @function
 * @name amex
 * @param value {string} version string
 * @returns {boolean}
 * @example
 * be.amex('378282246310005') // true
 */
CreditCard.amex = (value) => {
    return /^3[47][0-9]{13}$/.test(value);
};

/**
 * Check if is a valid Diner’s Club credit card
 *
 * **Interfaces**: `all`, `any`, `not`, `err`
 *
 * @function
 * @name dinersClub
 * @param value {string} version string
 * @returns {boolean}
 * @example
 * be.dinersClub('30569309025904') // true
 */
CreditCard.dinersClub = (value) => {
    return /^3(?:0[0-5]|[68][0-9])[0-9]{11}$/.test(value);
};

/**
 * Check if is a valid Discover credit card
 *
 * **Interfaces**: `all`, `any`, `not`, `err`
 *
 * @function
 * @name discover
 * @param value {string} version string
 * @returns {boolean}
 * @example
 * be.discover('6011111111111117') // true
 */
CreditCard.discover = (value) => {
    return /^6(?:011|5[0-9]{2})[0-9]{12}$/.test(value);
};

/**
 * Check if is a valid Mastercard credit card
 *
 * **Interfaces**: `all`, `any`, `not`, `err`
 *
 * @function
 * @name mastercard
 * @param value {string} version string
 * @returns {boolean}
 * @example
 * be.mastercard('5555555555554444') // true
 */
CreditCard.mastercard = (value) => {
    return /^5[1-5][0-9]{14}$/.test(value);
};

/**
 * Check if is a valid Visa credit card
 *
 * **Interfaces**: `all`, `any`, `not`, `err`
 *
 * @function
 * @name visa
 * @param value {string} version string
 * @returns {boolean}
 * @example
 * be.visa('4242424242424242') // true
 */
CreditCard.visa = (value) => {
    return /^4[0-9]{12}(?:[0-9]{3})?$/.test(value);
};

CreditCard = Interface.create(CreditCard);

module.exports = CreditCard;