# 信用卡生成器 (Card Generator) 虚拟信用卡号生成工具,支持多种卡类型和输出格式。 ## 功能特性 - ✅ 支持多种国际卡类型(银联、Visa、MasterCard、AMEX、Discover) - ✅ 可选 Luhn 算法校验 - ✅ 灵活的有效期生成(2026-2030) - ✅ 多种输出格式(Pipe、JSON、CSV、Pretty) - ✅ 批量生成支持 ## 技术实现 ### 卡号生成算法 #### 纯随机生成 ``` 卡号 = 固定前缀 + 随机数字 ``` #### Luhn算法生成 ``` 1. 固定前缀 + 随机数字(n-1位) 2. 计算校验位 3. 附加校验位得到完整卡号 ``` ### 有效期生成 ```javascript 月份: random(1-12) → 格式化为两位数 "01"-"12" 年份: random(26-30) → 格式化为两位数 "26"-"30" ``` ### CVV生成 ```javascript CVV = random(0, 10^cvvLength - 1) → 格式化为指定位数 ``` ## 配置说明 ### 卡类型配置结构 ```javascript { name: '卡类型名称', prefix: '卡号前缀', length: 卡号总长度, cvvLength: CVV长度, useLuhn: 是否使用Luhn算法 } ``` ### 添加新卡类型 编辑 `src/tools/card-generator/config.js`: ```javascript CARD_TYPES.newcard = { name: '新卡类型', prefix: '123456', length: 16, cvvLength: 3, useLuhn: true }; ``` ## API 参考 ### CardGenerator 类 ```javascript const CardGenerator = require('./generator'); const generator = new CardGenerator(); ``` #### 方法 **generate(type)** - 参数:`type` (string) - 卡类型,默认 'unionpay' - 返回:Object - 包含 number, month, year, cvv, type **generateBatch(count, type)** - 参数: - `count` (number) - 生成数量 - `type` (string) - 卡类型,默认 'unionpay' - 返回:Array - 卡信息数组 **getSupportedTypes()** - 返回:Array - 所有支持的卡类型 ### Formatter 类 ```javascript const Formatter = require('./formatter'); const formatter = new Formatter(); ``` #### 方法 **format(card, format)** - 参数: - `card` (Object) - 卡信息对象 - `format` (string) - 格式类型,默认 'pipe' - 返回:string - 格式化后的字符串 **formatBatch(cards, format)** - 参数: - `cards` (Array) - 卡信息数组 - `format` (string) - 格式类型 - 返回:string - 格式化后的字符串(多行) ## 使用示例 ### 基础用法 ```bash # 生成单张银联卡 node src/index.js card # 生成Visa卡 node src/index.js card -t visa # 批量生成 node src/index.js card -n 10 ``` ### 不同格式输出 ```bash # Pipe格式(默认) node src/index.js card # 输出: 6228367541234567|08|28|456 # JSON格式 node src/index.js card -f json # CSV格式 node src/index.js card -f csv # 美化格式 node src/index.js card -f pretty ``` ### 编程使用 ```javascript const CardGenerator = require('./src/tools/card-generator/generator'); const Formatter = require('./src/tools/card-generator/formatter'); const generator = new CardGenerator(); const formatter = new Formatter(); // 生成单张卡 const card = generator.generate('visa'); console.log(formatter.format(card, 'pipe')); // 批量生成 const cards = generator.generateBatch(5, 'unionpay'); cards.forEach(card => { console.log(formatter.format(card, 'pipe')); }); ``` ## 测试验证 ### 手动测试 ```bash # 测试不同卡类型 node src/index.js card -t unionpay node src/index.js card -t visa node src/index.js card -t mastercard node src/index.js card -t amex node src/index.js card -t discover # 测试批量生成 node src/index.js card -n 20 # 测试不同格式 node src/index.js card -f json node src/index.js card -f csv node src/index.js card -f pretty ``` ### Luhn算法验证 ```bash # 生成Visa卡(使用Luhn算法) node src/index.js card -t visa -f json # 使用在线工具验证卡号 # https://www.freeformatter.com/credit-card-number-generator-validator.html ``` ## 常见问题 ### Q: 为什么银联卡不使用Luhn算法? A: 可以在配置中启用。默认不启用是为了保持与原始样本数据的一致性。 ### Q: 如何修改有效期范围? A: 编辑 `src/tools/card-generator/config.js` 中的 `EXPIRY_CONFIG`。 ### Q: 生成的卡号能用于真实交易吗? A: **绝对不能!** 这些是测试用的虚拟卡号,没有任何实际价值。 ### Q: 如何添加自定义输出格式? A: 在 `config.js` 的 `OUTPUT_FORMATS` 中添加新格式: ```javascript OUTPUT_FORMATS.custom = { name: '自定义格式', formatter: (card) => `${card.number} - ${card.month}/${card.year} - ${card.cvv}` }; ``` ## 扩展建议 - [ ] 支持自定义前缀和长度 - [ ] 添加卡号验证功能 - [ ] 支持配置文件导入卡类型 - [ ] 生成完整的持卡人信息(姓名、地址等) - [ ] 支持特定BIN(银行识别码)生成 ## 相关资源 - [Luhn算法详解](https://en.wikipedia.org/wiki/Luhn_algorithm) - [信用卡号结构](https://en.wikipedia.org/wiki/Payment_card_number) - [BIN数据库](https://binlist.net/)