检测信用卡号的算法减少误报/否定

时间:2013-09-17 05:42:39

标签: regex algorithm credit-card luhn credit-card-track-data

我想创建一种可以从各种类型的文件中检测信用卡号(CCN)的算法。

如何查找CCN的简单方案是使用定义的正则表达式:

  1. 签证:^4[0-9]{12}(?:[0-9]{3})?$所有Visa卡号都以a开头 4。新卡有16位数字。旧卡有13个。
  2. 万事达卡:^5[1-5][0-9]{14}$所有万事达卡号码都以 数字5155。全部有16位数字。
  3. 美国运通卡:^3[47][0-9]{13}$美国运通卡号码 以3437开头,有15位数字。
  4. 大莱卡:^3(?:0[0-5]|[68][0-9])[0-9]{11}$大莱卡 数字以3003053638开头。全部有14位数。 Diners Club卡以5开头,有16位数字。 这些是大莱卡和万事达卡的合资企业 应该像万事达卡一样处理。
  5. 发现:^6(?:011|5[0-9]{2})[0-9]{12}$发现卡号 使用601165。全部有16位数字。
  6. JCB:^(?:2131|1800|35\d{3})\d{11}$ JCB卡以2131开头或 1800有15位数字。以35开头的JCB卡有16位数字。
  7. 然后我们可以使用Luhn Mod-10算法检查找到的数字,如果满足条件我们可以说我们找到了CCN。

    但是这种简单的方法从我的经验中得到了大量的误报/否定。

    可以使用哪些算法或启发式方法来减少误报/否定匹配?像PCI Data Finder或Card Recon这样的高级软件提供了更可靠的结果,并且通过简单的正则表达式查找和Luhn检查无法获得结果。

1 个答案:

答案 0 :(得分:0)

您可以使用像BINDB.com这样的来源购买BIN(银行识别码),从而通过仅考虑前六个(或在某些情况下为八个)数字与现有发卡银行匹配的卡来减少误报。

如果你只是在寻找美国发行的卡片,你可以用相同的方法大幅减少这个数量。