7

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

4

5 回答 5

13

请参阅此链接Find or Verifying Credit Card Numbers with Regulars Expressions

  • 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 位数字的大来卡。这些是大来卡和万事达卡的合资企业,应该像万事达卡一样处理。
  • 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 位数字。

再见。

于 2009-09-23T00:13:28.323 回答
6

如何使用包含空格的信用卡号?涵盖了您应该需要的一切。

于 2009-09-23T00:02:44.160 回答
1

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

于 2009-09-23T00:03:43.430 回答
0

- 编辑:

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

-- 以前的回应:

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

于 2009-09-23T00:01:59.527 回答
0

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

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

于 2009-09-23T00:04:51.180 回答