Validate International Securities Identification Number: Difference between revisions
Content deleted Content added
added FreeBASIC |
|||
Line 293: | Line 293: | ||
end function |
end function |
||
end program</lang> |
end program</lang> |
||
=={{header|FreeBASIC}}== |
|||
<lang freebasic>' version 27-10-2016 |
|||
' compile with: fbc -s console |
|||
#Ifndef TRUE ' define true and false for older freebasic versions |
|||
#Define FALSE 0 |
|||
#Define TRUE Not FALSE |
|||
#EndIf |
|||
Function luhntest(cardnr As String) As Long |
|||
cardnr = Trim(cardnr) ' remove spaces |
|||
Dim As String reverse_nr = cardnr |
|||
Dim As Long i, j, s1, s2, l = Len(cardnr) -1 |
|||
' reverse string |
|||
For i = 0 To l |
|||
reverse_nr[i] = cardnr[l - i] |
|||
Next |
|||
' sum odd numbers |
|||
For i = 0 To l Step 2 |
|||
s1 = s1 + (reverse_nr[i] - Asc("0")) |
|||
Next |
|||
' sum even numbers |
|||
For i = 1 To l Step 2 |
|||
j = reverse_nr[i] - Asc("0") |
|||
j = j * 2 |
|||
If j > 9 Then j = j Mod 10 +1 |
|||
s2 = s2 + j |
|||
Next |
|||
If (s1 + s2) Mod 10 = 0 Then |
|||
Return TRUE |
|||
Else |
|||
Return FALSE |
|||
End If |
|||
End Function |
|||
' ------=< MAIN >=----- |
|||
Dim As String test_str |
|||
Dim As String test_set(1 To ...) = { "US0378331005", "US0373831005", _ |
|||
"U50378331005", "US03378331005", "AU0000XVGZA3", _ |
|||
"AU0000VXGZA3", "FR0000988040" } |
|||
Dim As Long i, l, n, x |
|||
For i = 1 To UBound(test_set) |
|||
test_str = "" |
|||
l = Len(test_set(i)) |
|||
If l <> 12 Then |
|||
Print test_set(i), "Invalid, length <> 12 char." |
|||
Continue For |
|||
End If |
|||
If test_set(i)[0] < Asc("A") Or test_set(i)[1] < Asc("A") Then |
|||
Print test_set(i), "Invalid, number needs to start with 2 characters" |
|||
Continue For |
|||
End If |
|||
For n = 0 To l -1 |
|||
x = test_set(i)[n] - Asc("0") |
|||
' if test_set(i)[i] is a letter we to correct for that |
|||
If x > 9 Then x = x -7 |
|||
If x < 10 Then |
|||
test_str = test_str + Str(x) |
|||
Else ' two digest number |
|||
test_str = test_str + Str(x \ 10) + Str(x Mod 10) |
|||
End If |
|||
Next |
|||
Print test_set(i), IIf(luhntest(test_str) = TRUE, "Valid","Invalid, checksum error") |
|||
Next |
|||
' empty keyboard buffer |
|||
While InKey <> "" : Wend |
|||
Print : Print "hit any key to end program" |
|||
Sleep |
|||
End</lang> |
|||
{{out}} |
|||
<pre>US0378331005 Valid |
|||
US0373831005 Invalid, checksum error |
|||
U50378331005 Invalid, number needs to start with 2 characters |
|||
US03378331005 Invalid, length <> 12 char. |
|||
AU0000XVGZA3 Valid |
|||
AU0000VXGZA3 Valid |
|||
FR0000988040 Valid</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |