从C#中给定的15位数字生成校验位

时间:2018-12-14 07:16:39

标签: c# luhn

我需要验证15位数字的卡号,因为我必须生成校验和数字才能完成该数字,我该怎么做,我已经完成了以下操作; 我有一个15位数字的字符串,我想生成校验和数字以完成此操作。 以下this关于 Luhn算法的文章,我尝试过这样。

public static bool IsAllDigit(string digits)
    {
        if (string.IsNullOrEmpty(digits))
        {
            return false;
        }
        else
        {
            int numberOfChar = digits.Count();
            if (numberOfChar > 0)
            {
                bool r = digits.All(char.IsDigit);
                return r;
            }
            else
            {
                return false;
            }
        }
    }

    // 5*2 1 6*2 0 6*2 1 0*2 0 0*2 0 0*2 0 3*2 6 2*2
    public static string GenerateCRC(string digits)
    {
        int[] firstRow = new int[15];
        string CRC = string.Empty;
        if (IsAllDigit(digits))
        {
            var array = digits.Select(ch => ch - '0').ToArray();
            for (int i = 0; i < array.Length; i++)
            {
                if (i%2==0)
                {
                    var temp = array[i] * 2;
                    if (temp > 9)
                    {
                        var arr = temp.ToString().Select(t => int.Parse(t.ToString())).ToArray();
                        int f = arr.Sum();
                        firstRow[i] = f;
                    }
                    else
                    {
                        firstRow[i] = array[i]*2;
                    }
                }
                else
                {
                    firstRow[i] = array[i];
                }
            }
            var sum = firstRow.Sum();
            int crc = sum % 10;
            CRC = crc.ToString();
        }
        return CRC;           
    }

这是实施此代码然后验证数字的最佳方法。尽管它给出了正确的结果,但是可以总结或以明智的方式完成。请提出建议。

0 个答案:

没有答案