Генерация контрольной цифры из заданных 15 цифр в С#

Мне нужно подтвердить номер карты из 15 цифр, для этого мне нужно сгенерировать цифру контрольной суммы, чтобы завершить номер. Как я могу это сделать, я сделал следующее; У меня есть строка из 15 цифр, и я хочу сгенерировать цифру контрольной суммы, чтобы завершить ее. следуя этой статье об алгоритмах Луна, я пробовал так .

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;           
    }

Это лучший способ реализовать это, а затем проверить номер. Хотя это дает правильные результаты, но это можно обобщить или сделать умным способом. Предложения, пожалуйста.


person trighati    schedule 14.12.2018    source источник
comment
Это может лучше подойти для codereview.stackexchange.com.   -  person Joey    schedule 14.12.2018
comment
Я голосую за то, чтобы закрыть этот вопрос как не относящийся к теме, потому что это скорее вопрос проверки кода это лучший способ и лучше подходит для codereview.stackexchange.com   -  person pstrjds    schedule 14.12.2018
comment
Если у вас есть код, который уже работает, но вы хотите узнать, как его можно улучшить, задайте вопрос на codereview.stackexchange.com. но предоставьте более подробную информацию о том, какой элемент вы хотите улучшить. (Прочитайте руководство перед публикацией.)   -  person Jon Skeet    schedule 14.12.2018
comment
@pstrjds это не дубликат, вопрос, который вы связали как дубликат, рассказывает, как проверить число с помощью алгоритмов Луна, мой вопрос спрашивает, как сгенерировать оставшуюся контрольную сумму для любого предоставленного номера   -  person trighati    schedule 14.12.2018
comment
@trighati - я голосовал не за то, чтобы закрыть как дубликат, а как не по теме, и предложил задать этот вопрос на codereview, см. мой комментарий выше.   -  person pstrjds    schedule 14.12.2018