如何区分支付卡(例如信用卡/借记卡)号码和非支付卡号码?

时间:2016-09-29 07:54:49

标签: android payment credit-card

我正在开发移动支付应用。用户可以将他的所有卡片,包括付款(例如信用卡/借记卡/现金卡)和非付款(会员卡以获得积分)卡添加到应用程序。

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

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

请建议我是否有其他机制可以用来区分这两种卡片。

谢谢

1 个答案:

答案 0 :(得分:0)

由于comment隐含了@ iso8583-info-support,唯一可行的方法是进行BIN范围查找。 BIN是卡片的前几位数字(技术上最多6位),它们是在发卡机构的范围内发行的。例如,Visa"拥有" double min = Arrays.stream(grades).min().orElse(0.0); double avg = Arrays.stream(grades).average().orElse(0.0); long numPassing = Arrays.stream(grades).filter(grade -> grade >= 70).count(); ,因此任何以4*开头的卡都是Visa卡。万事达卡"拥有" 42221*-2720*,因此任何以51*-55*51525354开头的卡片都是万事达卡,但是以55开头的卡不是。 (它实际上是一张Maestro卡,它是万事达卡的子品牌,但它在技术上仍然是分开的 - 借方借方,另一方是信用卡。)在公共BIN上任何未被识别的东西几乎都是肯定是会员卡。

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

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