我有一个包含信用卡号的大文本文件,我被告知需要查看此文件,然后查找可能的信用卡号,我一直在使用Notepad ++'在文件中查找'正则表达式搜索模式使用这个简单的表达式:4 \ d {15}(这会搜索一个以4开头的16位长字符串,通常是VISA借记/贷记),然后我将其复制并粘贴到信用卡验证脚本中。
无论如何都要创建一个表达式来搜索以4开头的16位长字符串,并检查它是否使用Luhn算法(确保它是有效的)。
这是Luhn算法:
1)从倒数第二位开始向左移动,将所有交替数字的值加倍。
2)从左侧开始,取所有未受影响的数字,并将它们添加到步骤1中所有单个数字的结果中。如果步骤1中任何数字的结果是两位数,请务必添加首先是两个数字(即18将产生1 + 8)。基本上,你的等式看起来像是一个常规的加法问题,它会增加每一个数字。
3)第2步的总数必须以零结束才能使信用卡号有效。
答案 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;
}