使用正则表达式验证信用卡?

Posted

技术标签:

【中文标题】使用正则表达式验证信用卡?【英文标题】:Creditcard verification with regex? 【发布时间】:2010-11-30 14:23:13 【问题描述】:

使用正则表达式验证信用卡的正确方法是什么?如果使用哪一个,网上有很多。如果不是如何验证?

【问题讨论】:

【参考方案1】:

使用正则表达式查看此链接Finding or Verifying Credit Card Numbers

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 位数字。有以 5 开头并有 16 位数字的大来卡。这些是 Diners Club 和万事达卡的合资企业,应该像万事达卡一样处理。 Discover:^6(?:011|5[0-9]2)[0-9]12$ Discover 卡号以 6011 或 65 开头。全部为 16 位。 JCB: ^(?:2131|1800|35\d3)\d11$ 以 2131 或 1800 开头的 JCB 卡有 15 位数字。以 35 开头的 JCB 卡有 16 位数字。

再见。

【讨论】:

发现卡添加了一些新的范围,这里是发现卡的更新正则表达式^6(?:0110[0-9]|011[2-4][0-9]|01174|0117[7-9]|0118[6-9]|0119[0-9]|4[4-9][0-9]3|5[0-9]4)[0-9]10$ 中国银联怎么样?【参考方案2】:

How can I use credit card numbers containing spaces? 涵盖了您应该需要的一切。

【讨论】:

【参考方案3】:

我认为您正在寻找Luhn Algorithm。这是一个简单的校验和公式,用于验证各种标识号。

【讨论】:

【参考方案4】:

这取决于您希望预验证的准确度。要验证所有可能的内容,您需要计算卡片的最后一位数字并与输入的内容进行比较,这是 RegEx 无法做到的。

有关算法和其他详细信息,请参阅 this link,它还提供了您可以验证的常用数字前缀列表。

【讨论】:

【参考方案5】:

-- 编辑:

事实上,我会稍微不同意自己并同意 cletus。在发送之前尽可能多地进行验证(无需详细了解特定类型的信用卡 [恕我直言])。不言而喻(希望如此),这个验证应该在 javascript 中完成,以使其更快,然后在服务器上进行仔细检查(以及 JavaScript 残疾人士)。

-- 之前的回复:

别打扰;只需在您实际尝试付款时让提供商验证它。没有正当理由尝试自己验证。不过,如果您真的喜欢,可以使用this。

【讨论】:

不能再不同意了。支付网关需要时间。在尝试使用它之前,您应该尽一切可能确保它是有效的。 cletus:然后使用 Luhn 系统进行粗略检查,显然在发送之前确保所有需要的数据都发送给您。

以上是关于使用正则表达式验证信用卡?的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 使用正则表达式验证蒙面信用卡

为啥 C# 正则表达式信用卡验证函数会使用无效值进行验证? [复制]

使用正则表达式验证信用卡号

正则表达式 - 信用卡验证

用于验证日期的正则表达式 [重复]

js 常用正则表达式表单验证代码