【问题标题】:Should I collect and store the type of credit card (e.g. Visa) or determine it via the number?我应该收集和存储信用卡的类型(例如 Visa)还是通过号码来确定?
【发布时间】:2015-02-08 00:19:30
【问题描述】:

我正在编写将信用卡输入数据库的代码。我知道有一些正则表达式可用于确定卡的类型(Visa、MasterCard 等)。例如,Visa 的正则表达式是/^4[0-9]{12}(?:[0-9]{3})?$/。我只处理 Visa、MasterCard、Discover Card 和 American Express,不支持其他卡。

我的问题是:我应该从用户那里收集卡类型并将其存储在数据库中,还是从卡号导出卡类型,并且将其存储在数据库中?换句话说,是否存在任何情况,例如,Visa 卡与正则表达式不匹配,但仍然是 Visa 卡?

这不是关于 Luhn 检查,而是关于确定卡片类型的正则表达式。

【问题讨论】:

  • 对于它的价值,我见过的系统会询问用户并存储它。这不是你想猜错的事情来节省几个字节。
  • 您应该只从卡号派生卡类型。没有来自任何其他复选框的信息可以为您提供信息。监控卡号并及时修改您的正则表达式。我认为不会有太大变化。但是,您可以稍微放松一下正则表达式以捕捉错字。
  • stackoverflow.com/questions/72768/… 参考相关问题的优秀答案@ 提示并保存颁发者是很好的,而不是从 REGEX 模式确定颁发者。
  • 谢谢大家。我不关心节省空间,但我想避免人们输入 Visa 卡然后选择 MasterCard。这在过去发生了很多,因为一些老客户似乎认为一切都是万事达卡。
  • @NielsCastle 你只是想让 everything 离题,不是吗?节省实际尝试回答问题的时间。

标签: regex validation credit-card


【解决方案1】:

是否存在任何情况,例如 Visa 卡不匹配 正则表达式,但仍然是 Visa 卡?

是的,Visa 表达式限制为 13 16 位,而实际上 Visa 的范围可以从 13 到 19 位,尽管 16 位是迄今为止最常见的。

我应该从用户那里收集卡片类型

这里对此进行了深入讨论:Why do credit card forms ask for Visa, MasterCard, etc.?

当您评论您遇到用户输入不正确的问题时,我根本不会问他们正在使用什么,而是使用一组简单的前缀和长度正则表达式来识别卡的类型。然后,您可以将此值存储在您的数据库中,以保存将来再次获取它以用于查询)。

【讨论】:

    猜你喜欢
    • 2011-11-04
    • 2010-11-21
    • 2015-04-08
    • 2011-11-26
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2013-05-24
    相关资源
    最近更新 更多