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

时间:2013-12-09 11:14:54

标签: algorithm search notepad++ credit-card luhn

我有一个包含信用卡号的大文本文件,我被告知需要查看此文件,然后查找可能的信用卡号,我一直在使用Notepad ++'在文件中查找'正则表达式搜索模式使用这个简单的表达式:4 \ d {15}(这会搜索一个以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

1 个答案:

答案 0 :(得分:0)

这是一个简单的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;
}