生成仿信用卡的卡号

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<Integer> reversedCCnumberList = new Vector<Integer>();
        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<String> result = new Stack<String>();
        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

时间: 2024-10-13 21:56:02

生成仿信用卡的卡号的相关文章

SQL 快速生成不重复的卡号

--0042-9923-3598 select id = right('000000000000' + cast(cast(rand(checksum(newid()))*1000000000000 as bigint) as varchar),12) from Order 原文地址:https://www.cnblogs.com/Fooo/p/10682409.html

MasterCard信用卡测试卡号-creditcard-1

MasterCard信用卡测试卡号-creditcard-1 510510510510510051111111111111185454545454545454550000000000000455555555555511115555555555554444 VISA信用卡测试卡号-creditcard-2 4590613013277775411111111111111142261465788601174067425543164587400700000002742222222222224012888

java利用zxing生成仿新浪微博二维码

原文:java利用zxing生成仿新浪微博二维码 源代码下载地址:http://www.zuidaima.com/share/1550463729896448.htm 效果图: 说明在readme.txt文件

SAP批次号生成时,最后两位顺序号超过了99,需要和字母和数字组合生成新的批次号

背景:项目中,批次号的最后两位是顺序号,最后两位顺序号累加超过99会引起批次号重复,需要和字母结合生成批次号,比如:AAAAAA00.AAAAAA01.AAAAAA02.AAAAAA03......AAAAAA09.AAAAAA0A.AAAAAA0B......AAAAAA0Z.AAAAAA10,以下是利用ASC码进行数字字母组合的函数,希望对用到的TX有帮助. FUNCTION ZFUNC_GET_NEW_CHARG. *"-----------------------------------

PHP生成唯一的订单号

记:之前面试的时候被面试官问过简历项目中的订单号我是什么规则生成的,我牛逼吹过头了,乱说了一通,靠!今天在公司的项目中订单号生成,好奇,看了下,就是网上的这种而已. 1 * 2 * uniqid - 官方是这样说的: 3 * Gets a prefixed unique identifier based on the current time in microseconds. 4 */ 5 function build_order_no() 6 { 7 return date('Ymd').su

推荐一款精仿微信公众号样式的管理系统

这是一个十分有趣微信公众号样式主题,它能够将你的需要的HTML页面变成一个微信公众号文章的样式,而你站点的所有内容都和微信公众号的文章样式展示在一个微信框中.同时还有返回功能等等. 十分适合做微信公众号展示的朋友. 当然稍加修改也能让它有其他的这是一个十分有趣微信公众号样式主题,它能够将你的需要的HTML页面变成一个微信公众号文章的样式,而你站点的所有内容都和微信公众号的文章样式展示在一个微信框中.同时还有返回功能等等. 产品功能 1.支持一键采集,只需输入公众号的文章链接,即可一键生成一篇百分

仿微信公众号文章实现微信营销活动推广页面的方法

精仿公众号文章不是传统意义上的微信防封系统了,这是一款营销推广系统.因为对比普通网页和微信公众号文章,微信公众号文章的可信度.认知度的优势明显,于是仿公众号文章系统可以解决广大广告业主和公众号运营者在活动推广.营销推广上的问题.并且精仿公众号文章系统可实现所有内容皆可自定义和随时修改.阅读数.点赞数.留言内容等所有数据可随意设置,在灵活性上大大超越了公众号文章.   演示地址:http://www.188tool.cn/copy-articel 适用场景:分享活动,展销会活动,微信H5页面文章等

Vue仿微信公众号配置页面

一.需求: 1.刚好公司需要自定义微信公众号菜单配置,在vue的后台管理系统写一个页面,进行菜单配置. 二.页面图片:(menu对象值那个地方只是打印出来看而已,自行去掉) 三.demo链接 https://summer-lin.github.io/vue-wechat-menu-demo/#/ 四.框架 vue + elementUI + mockjs 因为公司是基于vue和elementUI,如果想改其他UI框架,则将el-开头的组件都换了就行了. 五.注意事项: 1.data里面有个men

python3 实现简单信用卡管理程序

1.程序执行代码: #Author by Andy #_*_ coding:utf-8 _*_ import os,sys,time Base_dir=os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(Base_dir) str="欢迎使用银行信用卡自助服务系统!\n" for i in str: sys.stdout.write(i) sys.stdout.flush() time.