2016-09-29 74 views
2

我正在使用移动支付应用程序。用户可以添加他的所有卡片,包括付款(例如信用/借记卡/现金卡)和不支付(积分卡赚取积分)卡到应用程序。如何区分支付卡(例如信用卡/借记卡)号码和非支付卡号码?

在添加卡片时,我想区分这两种类型的卡片,并希望在应用程序的单独列表中显示它们。

我虽然Luhn算法会做,但即使是非支付卡碰巧计算校验位按照Luhn算法。

请提出建议,如果有任何其他机制,我可以用来实际区分这两种类型的卡。

感谢

+1

我建议让您的应用程序用户根据需要对卡片进行分组,或使用正则表达式对常见范围进行快速卡号分析。有很多准备使用的例子,只是谷歌。通常的正则表达式不是100%正确的。由于这些表格的大小和永久更新,卡BIN表格的支持将会更加复杂。 –

+0

除上述注释外,ISO/IEC 7812是* most *支付卡的标准,因此您可以相当自信地确认支付卡号以4/5/6开头。尽管在这些范围内可能会有一些忠诚卡,特别是在6范围内。此外,一些发卡机构(JCB卡)会完全遵循不同的标准(JCB卡以3开头)。总结 - 让用户把它整理出来! – PaulG

+0

@PaulG - 实际上,7812适用于*所有*信用卡,包括JCB。 [此表](https://en.wikipedia.org/wiki/Payment_card_number#Issuer_identification_number_.28IIN.29)具有所有主要BIN范围(前几位)。值得注意的是,美国运通卡也以3开头,但很容易根据第二位数字与JCB区分开来。 – Bobson

回答

0

正如@他们comment暗示ISO8583,信息支持,要做到这一点唯一的好办法是BIN范围查找。 BIN是一张卡的头几个数字(技术上,最多6个),这些数字是发卡机构发放的。例如,Visa“拥有”4*,因此任何以4开头的卡都是Visa卡。万事达“拥有”2221*-2720*51*-55*,所以任何以51,52,53,5455开头的卡都是MasterCard,但是以56开头的卡不是。 (实际上它是一张Maestro卡,这是一张MasterCard子品牌,但它在技术上仍然是独立的 - 一个借记卡,另一个是信用卡。)公共BIN上无法识别的东西几乎肯定是一张忠诚卡。

这可以是一个数据库表,但它不一定非要 - 您可以轻松将其硬编码到您的应用程序中。但一定要使其可调。万事达卡将在今年10月份开始引入以2开头的卡号......如果您无法修改您的应用以支持该卡号,那么您将会惹恼用户。

This table on Wikipedia具有所有主要的BIN范围。还有at least one company,它销售的API更详细,并且比维基百科更新。

相关问题