目前我正在使用 Luhn 算法开发信用卡验证程序。到目前为止它正在工作,但接下来的事情是告诉哪家银行发行了这张卡。当然不是全部,只是少数。
问题:在一个发行人下存储可能的六位数字的正确方法是什么?
一家银行可以有 5-10-20 开头的数字序列,但我无法弄清楚正确的数据存储方法。
目前我正在使用 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}$
Diners Club 卡号以 300 到 305、36 或 38 开头。所有卡号都有 14 位数字。有以 5 开头并有 16 位数字的大来卡。这些是大来卡和万事达卡的合资企业,应该像万事达卡一样处理。^6(?:011|5[0-9]{2})[0-9]{12}$
Discover 卡号以 6011 或 65 开头,均为 16 位数字。^(?: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
)$
学分: