
Research
Node.js Fixes AsyncLocalStorage Crash Bug That Could Take Down Production Servers
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.
@juspay/cards-validator
Advanced tools
A JS/TS lib for validating credit and debit card numbers, determining card types, and providing card-specific information like CVV length
|
🎯 Card Type Detection |
✅ Luhn Algorithm Validation |
|
📏 Length Validation |
🔢 CVV Length Information |
|
🎨 Range-based Detection |
📘 TypeScript Support |
|
⚡ Zero Dependencies |
| 🏦 Card Type | 🔍 Pattern/Range | 📏 Valid Lengths | 🔢 CVV Length |
|---|---|---|---|
| 🔵 Visa | ^4 | 16 | 3 |
| 🔴 MasterCard | BIN ranges 222100-272099, 510000-559999 | 16 | 3 |
| 🔵 American Express | ^3[47] | 15 | 4 |
| 🟠 Discover | ^(6011|622...) | 16 | 3 |
| 🟢 JCB | ^35(2[89]|[3-8][0-9]) | 16 | 3 |
| 🔴 Maestro | ^(5018|5081|...) | 12-19 | 0, 3 |
| 🟣 RuPay | BIN ranges | 16 | 3 |
| 🔵 UnionPay | ^6[0289]|9[0245689]... | 16-19 | 3 |
| ⚪ Diners Club | ^30[0-5], ^3([689]|09) | 14 | 3 |
| 🟢 Laser | ^(6304|670[69]|6771) | 16-19 | 3, 4 |
| 🔵 Visa Electron | ^(4026|417500|...) | 16 | 3 |
| 🟠 Sodexo | ^(637513) | 16 | 3 |
npm install @juspay/cards-validator
Alternative package managers:
# Using Yarn
yarn add @juspay/cards-validator
# Using pnpm
pnpm add @juspay/cards-validator
import CardValidator from '@juspay/cards-validator';
// Create a new validator instance
const validator = new CardValidator('4111111111111111');
// Get card validation details
const result = validator.getCardDetails();
console.log(result);
// Output:
// {
// card_type: 'visa',
// valid: true,
// luhn_valid: true,
// length_valid: true,
// cvv_length: [3],
// supported_lengths: [16]
// }
import CardValidator, { CardDetails } from '@juspay/cards-validator';
// Validate different card types
const cards = [
'4111111111111111', // Visa
'5555555555554444', // MasterCard
'378282246310005', // American Express
'6011111111111117', // Discover
];
cards.forEach(cardNumber => {
const validator = new CardValidator(cardNumber);
const result: CardDetails = validator.getCardDetails();
console.log(`Card: ${cardNumber}`);
console.log(`Type: ${result.card_type}`);
console.log(`Valid: ${result.valid}`);
console.log(`CVV Length: ${result.cvv_length.join(', ')}`);
console.log('---');
});
The library automatically normalizes card numbers by removing spaces and dashes:
const validator1 = new CardValidator('4111 1111 1111 1111');
const validator2 = new CardValidator('4111-1111-1111-1111');
const validator3 = new CardValidator('4111111111111111');
// All three will produce the same result
console.log(validator1.getCardDetails().valid); // true
console.log(validator2.getCardDetails().valid); // true
console.log(validator3.getCardDetails().valid); // true
new CardValidator(cardNumber: string)
cardNumber: The credit card number to validate (string)getCardDetails(): CardDetailsReturns a comprehensive validation result object.
CardDetailsinterface CardDetails {
card_type: string; // Detected card type (e.g., 'visa', 'mastercard', 'amex', 'unknown')
valid: boolean; // Overall validity (luhn_valid && length_valid)
luhn_valid: boolean; // Whether card passes Luhn algorithm check
length_valid: boolean; // Whether card length is valid for detected type
cvv_length: number[]; // Valid CVV lengths for this card type, e.g., [3] or [3, 4]
supported_lengths: number[]; // Valid card number lengths, e.g., [16] or [12,13,14,15,16,17,18,19]
}
CardTypeinterface CardType {
name: string;
valid_length: number[];
cvv_length: number[];
pattern?: RegExp; // For pattern-based detection
range?: number[][]; // For BIN range-based detection
gaps?: number[]; // Optional: for formatting (e.g., Sodexo)
}
import CardValidator from '@juspay/cards-validator';
function formatCardInfo(cardNumber: string) {
const validator = new CardValidator(cardNumber);
const result = validator.getCardDetails();
if (result.valid) {
return {
isValid: true,
cardType: result.card_type.replace('_', ' ').toUpperCase(),
cvvLength: result.cvv_length,
message: `Valid ${result.card_type} card`
};
} else {
return {
isValid: false,
cardType: result.card_type,
issues: [
!result.luhn_valid && 'Invalid checksum',
!result.length_valid && 'Invalid length'
].filter(Boolean),
message: 'Invalid card number'
};
}
}
// Examples
console.log(formatCardInfo('4111111111111111'));
// { isValid: true, cardType: 'VISA', cvvLength: [3], message: 'Valid visa card' }
console.log(formatCardInfo('4111111111111112'));
// { isValid: false, cardType: 'visa', issues: ['Invalid checksum'], message: 'Invalid card number' }
# Clone the repository
git clone https://github.com/juspay/cards-validator.git
cd cards-validator
# Install dependencies
npm install
# Build the project
npm run build
# Run tests
npm test
# Run development mode with watch
npm run dev
| Script | Description |
|---|---|
npm run build | 🔨 Compile TypeScript to JavaScript |
npm run dev | 👀 Watch mode for development |
npm test | 🧪 Run test suite |
npm run clean | 🧹 Remove build artifacts |
npm run lint | 🔍 Run ESLint |
npm run format | ✨ Format code with Prettier |
The library includes comprehensive tests covering:
✅ Card type detection for all supported card types
✅ Luhn algorithm validation
✅ Length validation
✅ Edge cases and error handling
✅ Input normalization (spaces, dashes)
Run tests with:
npm test
git checkout -b feature/amazing-feature)git commit -m 'Add some amazing feature')git push origin feature/amazing-feature)This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions, please file an issue on the GitHub repository.
Made with ❤️ by Juspay Technologies
⭐ Star us on GitHub — it helps us grow!
FAQs
A JS/TS lib for validating credit and debit card numbers, determining card types, and providing card-specific information like CVV length
The npm package @juspay/cards-validator receives a total of 253 weekly downloads. As such, @juspay/cards-validator popularity was classified as not popular.
We found that @juspay/cards-validator demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 7 open source maintainers collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Research
Node.js patched a crash bug where AsyncLocalStorage could cause stack overflows to bypass error handlers and terminate production servers.

Research
/Security News
A malicious Chrome extension steals newly created MEXC API keys, exfiltrates them to Telegram, and enables full account takeover with trading and withdrawal rights.

Security News
CVE disclosures hit a record 48,185 in 2025, driven largely by vulnerabilities in third-party WordPress plugins.