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

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

【问题讨论】:

    标签: c# credit-card verification


    【解决方案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\d{3})\d{11}$ 以 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 系统进行粗略检查,显然在发送之前确保所有需要的数据都发送给您。
          猜你喜欢
          • 2015-09-14
          • 2018-08-15
          • 2019-02-26
          • 2016-07-31
          • 2012-07-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多