【问题标题】:Algorithms for detecting Credit Card Number reducing false positives/negatives用于检测信用卡号的算法减少误报/负数
【发布时间】:2013-09-21 10:23:41
【问题描述】:

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

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

  1. Visa:^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 位数字。 有些大来卡以5 开头,有16 位数字。 这些是 Diners Club 和 MasterCard 的合资企业,以及 应该像万事达卡一样处理。
  5. 发现:^6(?:011|5[0-9]{2})[0-9]{12}$发现卡号开始 与601165。都有 16 位数字。
  6. JCB:^(?:2131|1800|35\d{3})\d{11}$2131 开头的 JCB 卡或 1800 有 15 位数字。以35 开头的 JCB 卡有 16 位数字。

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

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

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

【问题讨论】:

  • 如果您只获取所有 15/16 位数字(省略连字符)并检查它们,究竟出了什么问题?似乎它可能足够快(与“简单”的正则表达式方法相比)来弥补误报。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-08-30
    • 2012-02-29
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    • 2014-02-27
    • 2017-08-15
    • 2019-03-11
    • 2018-01-08
    相关资源
    最近更新 更多