import { format, addYears } from 'date-fns'; function generateRandomNumber(min, max) { min = Math.ceil(min); max = Math.floor(max); return Math.floor(Math.random() * (max - min + 1)) + min; } function generateRandomDate(years = 5) { const currentDate = new Date(); const futureDate = addYears(currentDate, years); // Use addYears from date-fns const randomTimestamp = generateRandomNumber(currentDate.getTime(), futureDate.getTime()); // Generate random timestamp between current date and future date return new Date(randomTimestamp); } function generateLuhnCheckDigit(number) { let sum = 0; let shouldDouble = false; for (let i = number.length - 1; i >= 0; i--) { let digit = parseInt(number.charAt(i), 10); if (shouldDouble) { digit *= 2; if (digit > 9) digit -= 9; } sum += digit; shouldDouble = !shouldDouble; } const checkDigit = (10 - (sum % 10)) % 10; return checkDigit; } function generateSecurityCode() { return String(generateRandomNumber(0, 999)).padStart(3, '0'); } function generateVisaCardNumber() { const visaPrefix = '4'; // Visa card numbers typically start with '4' const randomPart = String(generateRandomNumber(100000000000000, 999999999999999)); // Example length, adjust as needed const partialNumber = visaPrefix + randomPart; const luhnDigit = generateLuhnCheckDigit(partialNumber); return partialNumber + luhnDigit; } function main() { const cardNumber = generateVisaCardNumber(); console.log(`Card Number: ${cardNumber}`); console.log(`Expiration Date: ${format(generateRandomDate(), 'MM/yy')}`); console.log(`Security Code: ${generateSecurityCode()}`); } main();