如何在一个名称下存储多个数字

时间:2014-12-12 06:48:08

标签: c# data-collection

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

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

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

1 个答案:

答案 0 :(得分:-1)

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

网上发现了一些解释:

  • Visa:^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位数字。
  • Diners Club:^3(?:0[0-5]|[68][0-9])[0-9]{11}$ Diners Club卡号以300至305,36或38开头。所有人都有14位数字。 Diners Club卡以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
)$

现金: