0

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

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

这是卢恩算法:

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

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

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

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

4

1 回答 1

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;
}
于 2013-12-09T18:02:50.530 回答