使用正则表达式验证信用卡?
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 系统进行粗略检查,显然在发送之前确保所有需要的数据都发送给您。以上是关于使用正则表达式验证信用卡?的主要内容,如果未能解决你的问题,请参考以下文章