我想创建一种可以从各种类型的文件中检测信用卡号(CCN)的算法。
如何查找CCN的简单方案是使用定义的正则表达式:
^4[0-9]{12}(?:[0-9]{3})?$
所有Visa卡号都以a开头
4
。新卡有16位数字。旧卡有13个。^5[1-5][0-9]{14}$
所有万事达卡号码都以
数字51
到55
。全部有16位数字。^3[47][0-9]{13}$
美国运通卡号码
以34
或37
开头,有15位数字。^3(?:0[0-5]|[68][0-9])[0-9]{11}$
大莱卡
数字以300
到305
,36
或38
开头。全部有14位数。
Diners Club卡以5
开头,有16位数字。
这些是大莱卡和万事达卡的合资企业
应该像万事达卡一样处理。^6(?:011|5[0-9]{2})[0-9]{12}$
发现卡号
使用6011
或65
。全部有16位数字。^(?:2131|1800|35\d{3})\d{11}$
JCB卡以2131
开头或
1800
有15位数字。以35
开头的JCB卡有16位数字。然后我们可以使用Luhn Mod-10算法检查找到的数字,如果满足条件我们可以说我们找到了CCN。
但是这种简单的方法从我的经验中得到了大量的误报/否定。
可以使用哪些算法或启发式方法来减少误报/否定匹配?像PCI Data Finder或Card Recon这样的高级软件提供了更可靠的结果,并且通过简单的正则表达式查找和Luhn检查无法获得结果。
答案 0 :(得分:0)
您可以使用像BINDB.com这样的来源购买BIN(银行识别码),从而通过仅考虑前六个(或在某些情况下为八个)数字与现有发卡银行匹配的卡来减少误报。
如果你只是在寻找美国发行的卡片,你可以用相同的方法大幅减少这个数量。