如何根据特定模式创建信用卡 PAN 生成器?

Posted

技术标签:

【中文标题】如何根据特定模式创建信用卡 PAN 生成器?【英文标题】:How to create credit card PAN generator based on a specific pattern? 【发布时间】:2019-11-19 19:59:38 【问题描述】:

我正在为一家小型银行构建一个发卡系统,我需要的是如何使系统根据特定模式生成卡号序列(或 PAN)。 例如,PAN 的前六位数字是银行 BIN:517070 接下来的两位数字是产品代码:假设是 30(可以是任何数字) 接下来的两位数字是分支代码:假设是 01 其余数字会随机生成(当然最后一位是校验位)

我的问题:是否有算法可以帮助我在系统中实现这些要求?

这个网站符合我的要求 https://www.elfqrin.com/discard_credit_card_generator.php

谢谢

【问题讨论】:

PAN 只是信用卡号吗?如果是这样,在 GitHub 等网站上有很多信用卡号生成器 - 它们中的任何一个都符合您的要求吗? 看起来,你需要一些 luhn 算法之王,看看这个thread @John 是的,它只是一个信用卡号。我会查找它,但到目前为止我没有找到任何符合我要求的东西。谢谢 @PavelAnikhouski,是的,生成的数字应该使用 luhn 算法进行验证。谢谢,我去看看 【参考方案1】:

使用字符串格式:

          Random rand = new Random();
          string bin = "517070";
          string productCode = "30";
          string branchCode = "01";
          int randNumber = rand.Next(0, int.MaxValue);
          string number = string.Format("0123", bin, productCode, branchCode, randNumber.ToString("D20"));

【讨论】:

您需要确定随机数部分不是重复的。一个简单的rand.next() 是不够的。确保唯一性的三种常见方法是 1) 保留列表并检查重复项。 2) 洗牌并取下一个洗牌号码 3) 加密。这个网站上有很多问题在讨论这个问题。 我知道。这个问题不是关于随机数的。它是关于生成一个由四部分组成的 30 格式的字符串。 @jdweng 该号码应该是一个有效的信用卡号 (PAN),这可以使用 luhn 算法来实现,而不应该是任何随机数。 我知道。我刚刚展示了如何格式化由 4 个部分组成的 30 个字符的字符串。您没有指定如何生成 PAN,所以我只是输入了一个随机数来获取 30 个字符的字符串。您说“其余的数字将随机生成”

以上是关于如何根据特定模式创建信用卡 PAN 生成器?的主要内容,如果未能解决你的问题,请参考以下文章

如何生成 Master Pass 商户 ID/商户 PAN

如何根据braintree中的客户ID在交易过程中显示特定客户已保存的信用卡?

如何根据模式动态生成数据集?

iOS设计模式之生成器

设计模式 Doctrine ORM - 根据输入生成唯一名称

设计模式2(抽象工厂,生成器)