如何使用 notepad++ 搜索 16 位长字符串(Luhn 算法)?

Posted

技术标签:

【中文标题】如何使用 notepad++ 搜索 16 位长字符串(Luhn 算法)?【英文标题】:How do I search for a 16-digit long string (Luhn algorithm) using notepad++? 【发布时间】:2013-12-26 11:28:12 【问题描述】:

我有一个包含信用卡号的大文本文件,有人告诉我需要查看该文件,然后找到可能的信用卡号,我一直在使用 Notepad ++ 'Find in Files' 正则表达式搜索模式使用这个简单的表达式:4\d15(搜索以 4 开头的 16 位长字符串,通常是 VISA 借记卡/贷记卡),然后我将其复制并粘贴到信用卡验证脚本中。

是否可以创建一个表达式来搜索以 4 开头的 16 位长字符串,并检查它是否使用 Luhn 算法(确保它有效)。

这是 Luhn 算法:

1) 从倒数第二个数字开始向左移动,将所有交替数字的值加倍。

2) 从左边开始,取出所有未受影响的数字并将它们添加到步骤 1 中所有单个数字的结果中。如果步骤 1 中的任何数字的结果是两位数,请确保添加首先是两个数字(即 18 将产生 1+8)。基本上,您的方程看起来就像一个添加每个数字的常规加法问题。

3) 第 2 步的总数必须以零结尾,信用卡号才有效。

来源:http://www.webopedia.com/TERM/L/Luhn_formula.html

【问题讨论】:

您不能单独使用 NOTEPAD++ 来做到这一点。您将需要编写一些代码来执行此操作。请问您为什么有一个包含看起来像信用卡号码的东西的非结构化文本文件?这听起来很可疑。 我不完全确定为什么我被要求这样做,我在一家在线销售产品的公司工作,我相信这与重建我们的数据库有关...... “您需要编写一些代码来执行此操作。”...这不是很有帮助,您能给我一个更好的解释吗? 正如 Lasse 告诉你的,你不能简单地使用正则表达式来验证 Luhn 校验和。您将需要使用编程语言编写更复杂的东西。如果您在互联网上搜索,您会发现一些不同语言的 Luhn 算法实现。在 Notepad++ 中执行此操作的唯一方法是使用 PythonScript 插件(因此您的实现应该在 Python 中)。 您询问是否可以使用 Notepad++。答案是否定的,它不能。 “你需要编写一些代码”意味着你需要编写一个程序来解析文件,找到潜在的信用卡号码,然后用 Luhn 算法检查它们。如果您需要这方面的帮助,请发布一个新问题。 【参考方案1】:

这是一个简单的LINQPad 程序,它从文件中提取所有以 4 开头的 16 位数字:

void Main()

    const string inputFileName = @"d:\temp\input.txt";
    const string outputFileName = @"d:\temp\output.txt";

    string input = File.ReadAllText(inputFileName);
    var matches =
        from Match ma in Regex.Matches(input, @"\d+")
        let number = ma.Value
        where number.Length == 16 && number.StartsWith("4")
        select number;

    var creditCardNumbers =
        from match in matches
        where IsCreditCardNumber(match)
        select match;

    File.WriteAllLines(outputFileName, creditCardNumbers);


public static bool IsCreditCardNumber(string number)

    // validate luhn checksum here
    return true;

【讨论】:

以上是关于如何使用 notepad++ 搜索 16 位长字符串(Luhn 算法)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Notepad++ 中搜索、替换和保留大小写?

如何使用正则表达式和 Notepad++ 删除所有非 ASCII 字符?

在 Notepad++ 中用 \t 替换正则表达式

如何在 Notepad++ 的 Python 脚本中将变量设置为正则表达式字符串?

几种编码方式

Notepad++ 搜索和替换:删除每一行中“/”之后的所有内容