我想要创建一个算法,可以检测信用卡号码(CCNs)从各种类型的文件。
如何找到CCNs的简单场景是使用所定义的正则表达式:
^4[0-9]{12}(?:[0-9]{3})?$所有的签证卡号码以4开头。新卡有16位数。旧卡有13张。^5[1-5][0-9]{14}$ ^5[1-5][0-9]{14}$ MasterCard数字从数字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位数。有食客俱乐部卡,以5开头,有16位数。这是食客俱乐部和MasterCard的合资公司,应该像MasterCard一样处理。^6(?:011|5[0-9]{2})[0-9]{12}$发现卡号以6011或65开头。都有16位数。^(?:2131|1800|35\d{3})\d{11}$以2131或1800开头的JCB卡有15位数。以35开头的JCB卡有16位数。然后,我们可以用Luhn Mod-10算法检查找到的数字,如果它满足了条件,我们就可以说我们找到了CCN。
但根据我的经验,这个简单的方法有大量的假阳性/阴性。
哪些算法或启发式可以用来减少假阳性/阴性匹配?先进的软件,如PCI数据查找或Card提供了更可靠的结果,这种结果肯定不是通过简单的正则表达式查找和Luhn检查来实现的。
发布于 2014-02-02 00:02:36
您可以使用像BINDB.com这样的源来购买BIN (银行识别号),从而通过只考虑前六位(或在某些情况下是八位数)与现有发卡银行匹配的卡来减少误报。
如果你只是在寻找美国发行的卡,你可以用同样的方法大幅减少这个数字。
https://stackoverflow.com/questions/18842081
复制相似问题