2015-07-19 2 views
0

У меня возникла проблема с программой, которую я пишу для школы. Мне нужно проверить номера кредитных карт, используя алгоритм Луна, однако у меня возникают трудности с правильной работой алгоритма. Я считаю, что знаю, где проблема, но я не могу это исправить.Алгоритм Luhn не работает

Я считаю, что проблема здесь:

For i = 0 To cardInput.Text.Length - 2 Step -2 
    Dim x = (i * 2) 
    If x > 9 Then 
     x = x - 9 
    End If 
    oddTotal += x 
Next 

'Sum of undoubled digits 
For i = 0 To cardLength - 1 Step -2 
    evenTotal += i 
Next 

total = oddTotal + evenTotal 

checkSum = total 

infoOutput.Items.Add("CheckDigit: " & checkDigit) 
infoOutput.Items.Add("CheckSum :" & checkSum) 

'Verify that the card is valid by the Mod 10 (Lund algoritm) 
If checkSum = checkDigit Or checkSum = 0 Then 
    valid = True 
Else 
    valid = False 
End If 

Если это необходимо, остальная часть моего проекта можно увидеть here

Мой код не начать с последней цифрой и принимать каждый другая цифра возвращается к началу удвоения. Здесь неверен оператор Step -2? Что я делаю не так?

+1

Вы, кажется, не использовать цифры номера карты. –

+0

Я не понимаю, как я не понимаю, если я использую этот код для отображения выбранной цифры, он отлично отображается в моем списке. infoOutput.Items.Add (cardInput.Text.Substring (cardLength -2,1)) поэтому цикл my For должен выбирать цифры и использовать их правильно? –

ответ

1

Здесь есть несколько проблем. В частности:

Если вы хотите, чтобы цикл отсчитывал назад, вам нужно начинать с более высокого индекса и заканчивать его на нижнем. Итак:

For i = cardInput.Text.Length - 2 To 0 Step -2 

Затем, вместо того, чтобы использовать i напрямую, вы должны использовать i -ith цифра:

Dim x = Val(cardInput.Text(i)) 

То же самое относится и к вашей сумме эвенов.

Если вы хотите проверить, если последняя цифра равна нулю, используйте Mod оператор:

valid = (checkSum Mod 10 = 0) 
+0

Большое спасибо! Я не понимал, что отступление назад, как и я, не приведет к тем же результатам, что и реверсирование строки во входном сигнале, и я забыл вернуть Mod 10, когда я играл с различными другими элементами. +1 за ответ! –

Смежные вопросы