我正在开发移动支付应用。用户可以将他的所有卡片,包括付款(例如信用卡/借记卡/现金卡)和非付款(会员卡以获得积分)卡添加到应用程序。
在添加卡片时,我想区分这两种类型的卡片,并希望将它们显示在应用内的单独列表中。
我虽然Luhn算法会做,但即使是非支付卡也会按照Luhn算法计算校验位。
请建议我是否有其他机制可以用来区分这两种卡片。
谢谢
答案 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卡。万事达卡"拥有" 4
和2221*-2720*
,因此任何以51*-55*
,51
,52
,53
或54
开头的卡片都是万事达卡,但是以55
开头的卡不是。 (它实际上是一张Maestro卡,它是万事达卡的子品牌,但它在技术上仍然是分开的 - 借方借方,另一方是信用卡。)在公共BIN上任何未被识别的东西几乎都是肯定是会员卡。
这可以是一个数据库表,但它不一定是 - 您可以轻松地将其硬编码到您的应用程序中。但一定要让它可调。 MasterCard将在今年10月开始推出以2开头的卡号...如果您无法修改您的应用以支持该功能,那么您将会惹恼用户。
This table on Wikipedia具有所有主要的BIN范围。还有at least one company销售的API更详细,并且比维基百科保持更新。