У меня есть алгоритм luhn, я пытаюсь выполнить шаги в Википедии для алгоритма, и он работает на примерах, которые они дают. и я подумал, что это правильно. Но это не работает ни на одной из моих личных карточек. ни на какие-либо из тестовых значений, которые я нашел в поисках решения этого.Программирование алгоритма Luhn
Я видел другие решения для этого, используя lamba и inline linq. Но я не хочу копировать и вставлять что-либо. я бы скорее понял, что я кодирую.
49927398716 pass
49927398717 fail
1234567812345678 fail
1234567812345670 pass (mine fails this one)
мой код выглядит следующим образом.
private bool CalculateLuhnAlgorithm()
{
string newListOfNumbers = this._number; //this._number is a string
int sumOfAllValues = 0;
if (_cardType != CardType.Unavailable)
{
//odd numbers minus the check Digit.
for (int i = this._number.Length - 2; i > 0; i -= 2)
{
int number = (int)char.GetNumericValue(this._number[i]) * 2;
if (number >= 10)
{
string concatinatedNumber = number.ToString();
int firstNumber = (int)char.GetNumericValue(concatinatedNumber[0]);
int secondNumber = (int)char.GetNumericValue(concatinatedNumber[1]);
number = firstNumber + secondNumber;
}
newListOfNumbers = newListOfNumbers.Remove(i, 1);
newListOfNumbers = newListOfNumbers.Insert(i, number.ToString());
}
// add up the complete total
foreach (char c in newListOfNumbers)
{
sumOfAllValues += (int)char.GetNumericValue(c);
}
}
// get the luhn validity
return (sumOfAllValues %10) == 0;
}
В чем ваш вопрос? – Adam
Вы когда-нибудь обращались к последней цифре во входной строке? – DrKoch
@DrKoch Контрольная цифра суммируется с другими числами, которые должны приводить к делению на 10. – juharr