52 lines
1.2 KiB
Plaintext
52 lines
1.2 KiB
Plaintext
' version 04-07-2018
|
|
' compile with: fbc -s console
|
|
|
|
Function Damm(digit_str As String) As UInteger
|
|
|
|
Dim As UInteger table(10,10) => { { 0, 3, 1, 7, 5, 9, 8, 6, 4, 2 } , _
|
|
{ 7, 0, 9, 2, 1, 5, 4, 8, 6, 3 } , { 4, 2, 0, 6, 8, 7, 1, 3, 5, 9 } , _
|
|
{ 1, 7, 5, 0, 9, 8, 3, 4, 2, 6 } , { 6, 1, 2, 3, 0, 4, 5, 9, 7, 8 } , _
|
|
{ 3, 6, 7, 4, 2, 0, 9, 5, 8, 1 } , { 5, 8, 6, 9, 7, 2, 0, 1, 3, 4 } , _
|
|
{ 8, 9, 4, 5, 3, 6, 2, 0, 1, 7 } , { 9, 4, 3, 8, 6, 1, 7, 2, 0, 5 } , _
|
|
{ 2, 5, 8, 1, 4, 3, 6, 7, 9, 0 } }
|
|
|
|
Dim As UInteger i, col_i, old_row_i, new_row_i
|
|
|
|
For i = 0 To Len(digit_str) -1
|
|
col_i = digit_str[i] - Asc("0")
|
|
new_row_i = table(old_row_i, col_i)
|
|
old_row_i = new_row_i
|
|
Next
|
|
|
|
Return new_row_i
|
|
|
|
End Function
|
|
|
|
' ------=< MAIN >=------
|
|
|
|
Data "5724", "5727", "112946", ""
|
|
|
|
Dim As UInteger checksum, t
|
|
Dim As String test_string
|
|
|
|
Do
|
|
|
|
Read test_string
|
|
If test_string = "" Then Exit Do
|
|
Print "Checksum test: ";test_string;
|
|
|
|
checksum = Damm(test_string)
|
|
If checksum = 0 Then
|
|
Print " is valid"
|
|
Else
|
|
Print " is invalid"
|
|
End If
|
|
|
|
Loop
|
|
|
|
' empty keyboard buffer
|
|
While Inkey <> "" : Wend
|
|
Print : Print "hit any key to end program"
|
|
Sleep
|
|
End
|