我应该收集和存储信用卡的类型(例如 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)还是通过号码来确定?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 表中搜索前缀?

visa的信用卡和普通信用卡有啥区别,如何办理

用于通过 VISA/万事达信用卡/借记卡和贝宝接收付款的 API [关闭]

问题阅读EMV签证信用卡记录

信用卡支付方式

自动检测信用卡类型与询问用户