如何在一个名称下存储多个号码

本文关键字:存储 号码 一个 | 更新日期: 2023-09-27 18:34:00

目前,我正在使用Luhn算法进行信用卡验证程序。到目前为止,它正在工作,但接下来的事情是告诉哪家银行发行了该卡。当然不是全部,只是少数。

问题:将可能的六位数字存储在一个发行人下的正确方法是什么?

一家银行可以有 5-10-20 个开头的数字序列,但我无法弄清楚正确的数据存储方法。

如何在一个名称下存储多个号码

您可以使用正则表达式来测试输入的字符串是否与信用卡格式匹配,然后测试它是否与特定的银行标识匹配。为了回答这个问题,雷鬼可以将找到的匹配发送到特定方法。这个可以分析匹配并检查数字是否正确,因为您知道银行发行人。但是,我强烈建议在存储卡信息之前三思而后行。即使在数据存储中,也必须使用强算法使用加密,并将加密密钥存储在其他位置!!

在网络上找到的一些解释:

  • 签证:^4[0-9]{12}(?:[0-9]{3})?$所有Visa卡号都以4开头。新卡有 16 位数字。旧卡有 13 张。
  • 万事达卡:^5[1-5][0-9]{14}$所有万事达卡号码都以数字 51 到 55 开头。所有都有 16 位数字。
  • 美国运通卡:^3[47][0-9]{13}$美国运通卡号以 34 或 37 开头,有 15 位数字。
  • 大莱俱乐部:^3(?:0[0-5]|[68][0-9])[0-9]{11}$大莱会员俱乐部卡号以 300 到 305、36 或 38 开头。所有都有 14 位数字。有些大莱会员卡以 5 开头,有 16 位数字。这些是大莱卡和万事达卡的合资企业,应该像万事达卡一样处理。
  • 发现:^6(?:011|5[0-9]{2})[0-9]{12}$发现卡号以 6011 或 65 开头。所有都有 16 位数字。
  • JCB:^(?:2131|1800|35'd{3})'d{11}$以 2131 或 1800 开头的 JCB 卡有 15 位数字。以 35 开头的 JCB 卡有 16 位数字。

然后,它呈现:

?:4[0-9]{12}(?:[0-9]{3})?          # Visa
|  5[1-5][0-9]{14}                  # MasterCard
|  3[47][0-9]{13}                   # American Express
|  3(?:0[0-5]|[68][0-9])[0-9]{11}   # Diners Club
|  6(?:011|5[0-9]{2})[0-9]{12}      # Discover
|  (?:2131|1800|35'd{3})'d{11}      # JCB
)$

学分:

  • 信用卡正则表达式的良好链接