我应该收集和存储信用卡的类型(例如 Visa)还是通过号码来确定?
Posted
技术标签:
【中文标题】我应该收集和存储信用卡的类型(例如 Visa)还是通过号码来确定?【英文标题】:Should I collect and store the type of credit card (e.g. Visa) or determine it via the number? 【发布时间】: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 检查,而是关于确定卡片类型的正则表达式。
【问题讨论】:
对于它的价值,我见过的系统会询问用户并存储它。这不是你想猜错的事情来节省几个字节。 您应该只从卡号派生卡类型。没有来自任何其他复选框的信息可以为您提供信息。监控卡号并及时修改您的正则表达式。我认为不会有太大变化。但是,您可以稍微放松一下正则表达式以捕捉错字。 在***.com/questions/72768/… 参考相关问题的优秀答案@ 提示并保存颁发者是很好的,而不是从 REGEX 模式确定颁发者。 谢谢大家。我不关心节省空间,但我想避免人们输入 Visa 卡然后选择 MasterCard。这在过去发生了很多,因为一些老客户似乎认为一切都是万事达卡。 @NielsCastle 你只是想让 everything 离题,不是吗?节省实际尝试回答问题的时间。 【参考方案1】:是否存在任何情况,例如 Visa 卡不匹配 正则表达式,但仍然是 Visa 卡?
是的,Visa 表达式限制为 13 或 16 位,而实际上 Visa 的范围可以从 13 到 19 位,尽管 16 位是迄今为止最常见的。
我应该从用户那里收集卡片类型
这里对此进行了深入讨论:Why do credit card forms ask for Visa, MasterCard, etc.?
当您评论您遇到用户输入不正确的问题时,我根本不会问他们正在使用什么,而是使用一组简单的前缀和长度正则表达式来识别卡的类型。然后,您可以将此值存储在您的数据库中,以保存将来再次获取它以用于查询)。
【讨论】:
以上是关于我应该收集和存储信用卡的类型(例如 Visa)还是通过号码来确定?的主要内容,如果未能解决你的问题,请参考以下文章