博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
生成仿信用卡的卡号
阅读量:5170 次
发布时间:2019-06-13

本文共 4717 字,大约阅读时间需要 15 分钟。

package com.shopping.test;import java.util.List;import java.util.Stack;import java.util.Vector;/** * 随机生成仿信用卡的会员号 * 20190819 */public class RandomCreditCardNumberGenerator {    public static final String[] VISA_PREFIX_LIST = new String[]{"4539",            "4556", "4916", "4532", "4929", "40240071", "4485", "4716", "4"};    public static final String[] MASTERCARD_PREFIX_LIST = new String[]{"51",            "52", "53", "54", "55"};    public static final String[] AMEX_PREFIX_LIST = new String[]{"34", "37"};    public static final String[] DISCOVER_PREFIX_LIST = new String[]{"6011"};    public static final String[] DINERS_PREFIX_LIST = new String[]{"300",            "301", "302", "303", "36", "38"};    public static final String[] ENROUTE_PREFIX_LIST = new String[]{"2014",            "2149"};    public static final String[] JCB_PREFIX_LIST = new String[]{"35"};    public static final String[] VOYAGER_PREFIX_LIST = new String[]{"8699"};    static String strrev(String str) {        if (str == null)            return "";        String revstr = "";        for (int i = str.length() - 1; i >= 0; i--) {            revstr += str.charAt(i);        }        return revstr;    }    /**     * 生成卡号     * @param prefix 前缀     * @param length 卡号长度 13或者16位     */    static String completed_number(String prefix, int length) {        String ccnumber = prefix;        while (ccnumber.length() < (length - 1)) {            ccnumber += new Double(Math.floor(Math.random() * 10)).intValue();        }        String reversedCCnumberString = strrev(ccnumber);        List
reversedCCnumberList = new Vector
(); for (int i = 0; i < reversedCCnumberString.length(); i++) { reversedCCnumberList.add(new Integer(String.valueOf(reversedCCnumberString.charAt(i)))); } int sum = 0; int pos = 0; Integer[] reversedCCnumber = reversedCCnumberList .toArray(new Integer[reversedCCnumberList.size()]); while (pos < length - 1) { int odd = reversedCCnumber[pos] * 2; if (odd > 9) { odd -= 9; } sum += odd; if (pos != (length - 2)) { sum += reversedCCnumber[pos + 1]; } pos += 2; } int checkdigit = new Double( ((Math.floor(sum / 10) + 1) * 10 - sum) % 10).intValue(); ccnumber += checkdigit; return ccnumber; } /** * 信用卡号码 * @param prefixList 前缀的数组 * @param length 长度 * @param howMany 数量 * @return */ public static String[] credit_card_number(String[] prefixList, int length, int howMany) { Stack
result = new Stack
(); for (int i = 0; i < howMany; i++) { int randomArrayIndex = (int) Math.floor(Math.random() * prefixList.length); String ccnumber = prefixList[randomArrayIndex]; result.push(completed_number(ccnumber, length)); } return result.toArray(new String[result.size()]); } /** * 生成一个卡号的数组 * @param howMany 卡号的数量 * @return String[] 数组 */ public static String[] generateMasterCardNumbers(int howMany) { return credit_card_number(MASTERCARD_PREFIX_LIST, 16, howMany); } public static String generateMasterCardNumber() { return credit_card_number(MASTERCARD_PREFIX_LIST, 16, 1)[0]; } public static boolean isValidCreditCardNumber(String creditCardNumber) { boolean isValid = false; try { String reversedNumber = new StringBuffer(creditCardNumber).reverse().toString(); int mod10Count = 0; for (int i = 0; i < reversedNumber.length(); i++) { int augend = Integer.parseInt(String.valueOf(reversedNumber .charAt(i))); if (((i + 1) % 2) == 0) { String productString = String.valueOf(augend * 2); augend = 0; for (int j = 0; j < productString.length(); j++) { augend += Integer.parseInt(String.valueOf(productString.charAt(j))); } } mod10Count += augend; } if ((mod10Count % 10) == 0) { isValid = true; } } catch (NumberFormatException e) { } return isValid; } public static void main(String[] args) { int howMany = 500; String[] creditcardnumbers = generateMasterCardNumbers(howMany); for (int i = 0; i < creditcardnumbers.length; i++) { System.out.println(creditcardnumbers[i]); } }}

转载于:https://www.cnblogs.com/wyf-love-dch/p/11379505.html

你可能感兴趣的文章
向数据源DataTable 中添加新的一列,并向其赋值
查看>>
(C/C++) Link List - C 語言版本
查看>>
Spring 各种包功能
查看>>
[leedcode 122] Best Time to Buy and Sell Stock II
查看>>
[leedcode 137] Single Number II
查看>>
[转载]如何捕获控制台消息
查看>>
myeclipse激活+Aptana安装配置
查看>>
嵊州D1T1 总统先生,一路走好!
查看>>
Python字符串图解
查看>>
[家里蹲大学数学杂志]第270期张恭庆编《泛函分析讲义》2.5节以前的习题参考解答...
查看>>
博文内部设置目录尝试
查看>>
Linux下的.NET之旅:第一站,CentOS+Mono+Xsp构建最简单的ASP.NET服务器
查看>>
什么是生成器
查看>>
电脑快捷键总结
查看>>
VS 快捷键
查看>>
QT语言翻译
查看>>
HTML DOM对象的属性和方法介绍(原生JS方法)
查看>>
js手机号批量滚动抽奖代码实现
查看>>
properties类
查看>>
php常见问题辨析(二)
查看>>