generate-payment-card
Version:
This package generates valid payment card (credit, debit or otherwise) numbers.
171 lines (147 loc) • 6.24 kB
Markdown
# Generate payment card
This package generates a valid payment card number. A payment card can either be a credit, debit or otherwise.
[](https://badge.fury.io/js/generate-payment-card) [](https://coveralls.io/github/Fiyin-Anne/generate-payment-card?branch=main) [](https://github.com/Fiyin-Anne/generate-payment-card/actions/workflows/node.js.yml)
### 🚀 Getting started
Install the package from npm.
`npm install generate-payment-card`.
### 🧰 Basic usage
```javascript
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:
```javascript
{
"user_digits": {
"status": true,
"digits": 2345678991,
"position": "endswith"
}
}
```
**Output:**
```javascript
{
"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`.
2. Sending a payload with card_brand:
```javascript
{
"user_digits": {
"status": true,
"digits": 2345678991,
"position": "endswith"
}
}
```
**Output:**
```javascript
{
"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.
```javascript
{
"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.`
2. Expiry date higher than 5 years
```javascript
{
"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.`
3. Balance higher than 5million
```javascript
{
"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.`
4. Card brand not `Visa`, `Mastercard`, `American Express` or `Discover`.
```js
{
"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'].
`