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 メソッドを呼び出します。これらの結果を変数に取り込む必要があるため、それを update ステートメントに連結できます。それを行う方法はありますか?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;
}
}