生成仿信用卡的卡号

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
生成对抗网络(GAN)在信用卡欺诈检测中被广泛应用。GAN是一种由生成器和判别器组成的模型,通过互相博弈的方式提高生成数据的质量。在信用卡欺诈检测中,可以将正常交易作为真实数据,将欺诈交易作为生成数据。 以下是一个简单的基于Python的信用卡欺诈检测GAN示例: 1. 准备数据集: 收集包含正常和欺诈交易的数据集,并进行预处理。 2. 构建生成器: 使用神经网络构建生成器模型。生成器接受一个随机噪声向量作为输入,并输出合成的欺诈交易数据。 3. 构建判别器: 使用神经网络构建判别器模型。判别器接受真实的正常交易数据和生成生成的欺诈交易数据作为输入,并输出一个概率值,表示输入数据是真实正常交易的概率。 4. 训练模型: 通过交替训练生成器和判别器来提高模型性能。首先,固定生成器,训练判别器来区分真实数据和生成数据。然后,固定判别器,训练生成器来生成更逼真的欺诈交易数据。重复这个过程直到达到预设的训练次数或性能指标。 5. 评估模型: 使用测试数据集评估训练好的模型的性能。可以使用各种指标,如准确率、精确率、召回率等来评估模型的欺诈检测能力。 需要注意的是,这只是一个简单的示例,实际应用中可能需要更复杂的模型和技术来处理信用卡欺诈检测。同时,保护用户隐私和数据安全也是很重要的,需要采取适当的措施来保护敏感信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值