generate-payment-card

This package generates valid payment card (credit, debit or otherwise) numbers.

Usage no npm install needed!

<script type="module">
  import generatePaymentCard from 'https://cdn.skypack.dev/generate-payment-card';
</script>

README

Generate payment card

This package generates a valid payment card number. A payment card can either be a credit, debit or otherwise.

npm version Coverage Status Node.js CI

🚀 Getting started

Install the package from npm.

npm install generate-payment-card.

🧰 Basic usage

var generatePaymentCard = require('generate-payment-card')
var payment_card_details = generatePaymentCard.generate({
    "card_brand": "american express",
    "user_digits": {
        "status": true,
        "digits": 2345678991,
        "position": "endswith"
    }
})

console.log(payment_card_details)
/* outputs: 
{
    "valid_card_number": "374692345678991"
    "cvv": 591
    "expiry_date": Fri Apr 24 2026 17:44:00 GMT+0100 (West Africa Standard Time)
    "balance: 0
    "issuer": "AMERICAN EXPRESS"
    "card_brand": "american express"
}
*/

P.S: If testing with the exact values used above, output for some of the properties may differ slightly due to time difference and randomization used in creation some of the values.

Request payload

The generate function takes in one argument which is an object. This can contain a couple of properties including a card_brand (string), user_digits (object) and issuer (string).

The only required property is user_digits. This allows the user to specify a sequence of strictly ten digits which they want to be a part of the payment card number. They can also specify where they want this sequence to be placed by setting position to startswith, contains, or endswith. The user_digits value consists of three properties:

  • status: which shows if the user will be specifying their own sequence of digits. This key's property can either be true, false, yes, or no. If set to false, and no other property is provided, a visa payment card will be created and the other fields will have default values. Also, if it is set to false, every other property in the user_digits object will be disregarded.
  • digits: This is the sequence of 10 digits that the user provides.
  • position: This indicates where the user wants the digits to be placed in the the generated card numbers. If the value is startswith and the user also passes a card_brand value, the digits will be prioritised over the value.

Response payload

Once a payment card number has been generated successfully, it returns an object consisting of the following:

  • valid_card_number: This is the valid card number created.
  • cvv: This is the card verification value usually found at the back of a payment card. Here, it is generated randomly.
  • expiry_date: The user can pass their prefered length of years between 1 and 5 after which the card should expire. The default value is 5.
  • balance: The user can also pass their prefered balance amount between ten thousand and five million. The default value is 0.
  • issuer: This is the specific organization that the card was generated from.
  • card_brand: This refers to the brand of the payment card. Currently, this package is only able to generate Mastercard, Visa, American Express and Discover cards.

Sample requests

  1. Sending a payload without specifying card_brand:
{
    "user_digits": {
        "status": true,
        "digits": 2345678991,
        "position": "endswith"
    }
}

Output:

{
    "valid_card_number": "4381392345678991"
    "cvv": 604
    "expiry_date": Fri Apr 24 2026 16:31:11 GMT+0100 (West Africa Standard Time)
    "balance": 0
    "issuer": "UNICREDIT BANK SERBIA JSC BELGRAD"
    "card_brand": "visa"
}

If no card brand is passed, the default is Visa.

  1. Sending a payload with card_brand:
{
    "user_digits": {
        "status": true,
        "digits": 2345678991,
        "position": "endswith"
    }
}

Output:

{
    "valid_card_number": "6011322345678991",
    "cvv": 993,
    "expiry_date": Fri Apr 24 2026 17:58:01 GMT+0100 (West Africa Standard Time),
    "balance": 0,
    "issuer": "BANK OF AMERICA",
    "card_brand": "discover"
}

Error messages

Each key in the object parameter goes through a joi validator before a payment card number can be created. Errors could also arise due to other limitations.

Sample invalid request

  1. The database being used in this package is limited so there is a limit to the number of issuers supported.
{
    "card_brand": "mastercard",
    "user_digits": {
        "status": true,
        "digits": 3745678991,
        "position": "startswith"
    },
    "issuer": "access bank"
};

Outputs: Error: This card brand is not available for this company or company does not exist in our database.

  1. Expiry date higher than 5 years
{
    "card_brand": "american express",
    "user_digits": {
        "status": true,
        "digits": 2345678991,
        "position": "endswith"
    },
    "expires_in": 10
}

Outputs: Error: ValidationError: Expiry year must be between 1 and 5.

  1. Balance higher than 5million
{
    "card_brand": "visa",
    "user_digits": {
        "status": true,
        "digits": 3745678991,
        "position": "contains"
    },
    "issuer": "bank of america",
    "balance": 200000000,
};

Outputs: Error: ValidationError: Balance must be between 10000 and 5000000.

  1. Card brand not Visa, Mastercard, American Express or Discover.
{
    "card_brand": "Maestro",
    "user_digits": {
        "status": true,
        "digits": 3745678991,
        "position": "contains"
    },
    "issuer": "bank of america",
    "balance": 2000,
};

Outputs: Error: ValidationError: card brand is not currently supported. [available: 'visa', 'mastercard', 'discover', 'american express'].