我有一个需要执行 luhn 检查的 CCN。我的大部分代码都在工作,但现在我需要用结果更新我的数据库,这样我就知道哪些卡是有效的。这是我正在使用的一些代码:
int valid;
foreach (DataRow dr in dt.Rows)
{
string cardNumber = dr["cardNumber"].ToString();
Console.WriteLine ("{0} is {1}valid", cardNumber, cardNumber.ToString().LuhnCheck() ? "" : "not ");
valid = /*some code here*/;
SqlCommand cmd = new SqlCommand("update MyTable SET LuhnSatisfied =" + valid + " where cardNumber =" + cardNumber, con);
cmd.ExecuteNonQuery();
}
我的 console.writeline 语句调用返回 0 或 1 的 LuhnCheck 方法。我需要将这些结果捕获到一个变量中,因此我可以将其连接到我的更新语句中。任何想法如何做到这一点?这是其余的 luhnCheck 代码
public static class Luhn
{
public static bool LuhnCheck(this string cardNumber)
{
return LuhnCheck(cardNumber.Select(c => c - '0').ToArray());
}
static readonly int[] results = { 0, 2, 4, 6, 8, 1, 3, 5, 7, 9 };
private static bool LuhnCheck(this int[] digits)
{
int checkValue = GetCheckValue(digits);
return checkValue == 0;
}
private static int GetCheckValue(int[] digits)
{
int i = 0;
int lengthMod = digits.Length % 2;
return digits.Sum(d => i++ % 2 == lengthMod ? results[d] : d) % 10;
}
}