Мне нужно подтвердить номер карты из 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;
}
Это лучший способ реализовать это, а затем проверить номер. Хотя это дает правильные результаты, но это можно обобщить или сделать умным способом. Предложения, пожалуйста.