1

我有一个需要执行 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;
        }
    }
4

1 回答 1

0
foreach (DataRow dr in dt.Rows)
{
    string cardNumber = dr["cardNumber"].ToString();
    bool isValid = cardNumber.ToString().LuhnCheck();
    Console.WriteLine("{0} is {1}valid", cardNumber, isValid  ? "" : "not ");

    string isValidSqlBool = isValid ? "1" : "0";
    SqlCommand cmd = new SqlCommand("update MyTable SET LuhnSatisfied = " + isValidSqlBool + " where cardNumber =" + cardNumber, con);           
    cmd.ExecuteNonQuery();
} 
于 2014-06-03T22:38:48.467 回答