
Security News
High-Severity RCE Vulnerability Disclosed in next-mdx-remote
HashiCorp disclosed a high-severity RCE in next-mdx-remote affecting versions 4.3.0 to 5.x when compiling untrusted MDX on the server.
@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
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.

Security News
HashiCorp disclosed a high-severity RCE in next-mdx-remote affecting versions 4.3.0 to 5.x when compiling untrusted MDX on the server.

Security News
Security researchers report widespread abuse of OpenClaw skills to deliver info-stealing malware, exposing a new supply chain risk as agent ecosystems scale.

Security News
Claude Opus 4.6 has uncovered more than 500 open source vulnerabilities, raising new considerations for disclosure, triage, and patching at scale.