支持 19 位 Visa 和 Discover 卡验证的正则表达式模式 [关闭]

Posted

技术标签:

【中文标题】支持 19 位 Visa 和 Discover 卡验证的正则表达式模式 [关闭]【英文标题】:Regex pattern to support the 19 digit Visa and Discover card validation [closed] 【发布时间】:2020-10-14 07:40:43 【问题描述】:

目前我正在使用以下正则表达式,但它们不支持 Visa 和 Discover 的 19 位数字卡。请帮忙。

 visaCardPattern: /^4[0-9]12(?:[0-9]3)?$/

discoverCardPattern: /^6(?:011|5[0-9]2)[0-9]12$/

【问题讨论】:

19位代码的规则是什么? @VLAZ 规则是一样的,我要问的是上面提到的卡表达式支持16位,我们如何将其更改为最多支持19位,以防签证和发现。跨度> 【参考方案1】:

对于 VISA - 您只需将可选的 [0-9] 组匹配一次或两次即可。

^4[0-9]12(?:[0-9]3)0,2$

基本上这与您已经拥有的正则表达式相同,除了可选的 [0-9]3 组现在有 3 种可能的结果-

根本不匹配 - 13 位 VISA 匹配一次 - 16 位 VISA 匹配两次 - 19 位 VISA

查看演示here

对于发现卡 - 更简单,您只需为 [0-9]12 添加一个上限。

由于发现卡的长度可以在 16 到 19(含)之间,您只需将正则表达式更改为 -

^6(?:011|5[0-9]2)[0-9]12,15$

这与您自己的正则表达式相同,只是最终的 0-9 组现在具有以下结果-

匹配 12 次 - 总长度为 16 匹配 13 次 - 总长度为 17 匹配 14 次 - 总长度为 18 匹配 15 次 - 总长度为 19

查看演示here

注意:这是假设发现卡的长度可以在 16 到 19 之间,而不是 16 或 19。一些消息来源说它可以有任何长度,而有些人说它只能有 16 或 19。

我不是信用卡专家,但为了完整起见,我将包含一个正则表达式来匹配发现卡的 16 或 19-

^6(?:011|5[0-9]2)(?:[0-9]3)4,5$

这个匹配最终的[0-9] 4 人一组,结果如下-

匹配 4 次 - 共 16 位 匹配 5 次 - 共 19 位

查看演示here

编辑:对于万事达卡,你可以试试这个-

^(?:5[1-5][0-9]2|222[1-9]|22[3-9][0-9]|2[3-6][0-9]2|27[01][0-9]|2720)(?:[0-9]3)4,5$

与发现卡的方法完全一样,只是匹配最后一个[0-9],每组3个,匹配4次或5次。 (又名 4 次共 16 位数字和 5 次共 19 位数字)

查看演示here

【讨论】:

这是一个很好的答案,解释得很好。你能帮我处理万事达卡吗?在万事达卡的情况下,我尝试了同样的方法来支持 16 位和 19 位数字。 masterCardPattern: /^(?:5[1-5][0-9]2|222[1-9]|22[3-9][0-9]|2[3-6][0- 9]2|27[01][0-9]|2720)[0-9]12$/ 评论中提到的万事达卡模式支持16位数字

以上是关于支持 19 位 Visa 和 Discover 卡验证的正则表达式模式 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

VISA/MasterCard/AE/DC/JCB卡号结构

正则表达式识别商店信用卡号

visa的信用卡和普通信用卡有啥区别,如何办理

在线接受支付时在哪里可以找到不同卡所需的参数

信用卡 卡号

6222 0216 0701 0639 962是哪里的银行啊,谢谢。