0

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

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

  1. Visa:^4[0-9]{12}(?:[0-9]{3})?$所有 Visa 卡号均以 . 开头 4。新卡有 16 位数字。老牌有13张。
  2. 万事达卡:所有万事达卡号码都以^5[1-5][0-9]{14}$数字开头。都有 16 位数字。5155
  3. 美国运通:^3[47][0-9]{13}$美国运通卡号以34或开头,37有 15 位数字。
  4. Diners Club:^3(?:0[0-5]|[68][0-9])[0-9]{11}$Diners Club 卡号30030536开头38。都有 14 位数字。5有以16 位数字开头的大来卡。这些是大来卡和万事达卡的合资企业,应该像万事达卡一样处理。
  5. 发现:^6(?:011|5[0-9]{2})[0-9]{12}$发现卡号以6011或开头65。都有 16 位数字。
  6. JCB: JCB 卡以或 有 15 位数字^(?:2131|1800|35\d{3})\d{11}$开头。以开头的 JCB 卡有 16 位数字。2131180035

然后我们可以用 Luhn Mod-10 算法检查找到的数字,如果它满足条件,我们可以说我们找到了 CCN。

但是根据我的经验,这种简单的方法有很多误报/否定。

可以使用哪些算法或启发式方法来减少误报/误报匹配?PCI Data Finder 或 Card Recon 等高级软件提供了更可靠的结果,而这些结果绝对不是通过简单的正则表达式查找和 Luhn 检查来实现的。

4

1 回答 1

0

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

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

于 2014-02-02T00:02:36.283 回答