Jump to content

IBAN: Difference between revisions

2,467 bytes added ,  5 years ago
No edit summary
Line 4,351:
GB42 WEST 1234 5698 7654 32 : no</pre>
 
=={{header|VBA}}==
{{trans|Phix}}<lang vb>Public nations As New Collection
Private Sub init()
nations.Add 24, "AD"
nations.Add 21, "CH"
nations.Add 22, "GB"
nations.Add 24, "SA"
nations.Add 20, "XK"
End Sub
 
Private Function mod97(ByVal c As String) As Integer
Dim n As Long
n = Val(Mid(c, 1, 9))
c = Mid(c, 10, Len(c) - 9)
n = n Mod 97
Do While Len(c) > 6
n = Val(Str(n) & Mid(c, 1, 7))
n = n Mod 97
c = Mid(c, 8, Len(c) - 7)
Loop
n = Val(Str(n) & c)
mod97 = n Mod 97
End Function
 
Private Function iban(ByVal code As String) As Boolean
'-- This routine does and should reject codes containing spaces etc.
'-- Use iban_s() below for otherwise.
On Error GoTo 1
lengths = nations(Mid(code, 1, 2))
If Len(code) = lengths Then
code = code & Mid(code, 1, 4)
code = Mid(code, 5, lengths)
Dim c As String: c = ""
Dim ch As String
For i = 1 To lengths
ch = Mid(code, i, 1)
If ch >= "0" And ch <= "9" Then
c = c & ch
Else
If ch >= "A" And ch <= "Z" Then
c = c & Str(Asc(ch) - 55)
Else
iban = False
End If
End If
Next i
c = Replace(c, " ", "")
iban = mod97(c) = 1
End If
Exit Function
1:
iban = False
End Function
Private Function iban_s(code As String) As Boolean
'-- strips any embedded spaces and hyphens before validating.
code = Replace(code, " ", "")
code = Replace(code, "-", "")
iban_s = iban(code)
End Function
Private Sub test(code As String, expected As Boolean)
Dim valid As Boolean
valid = iban_s(code)
Dim state As String
If valid = expected Then
state = IIf(valid, "ok", "invalid (as expected)")
Else
state = IIf(valid, "OK!!", "INVALID!!") & " (NOT AS EXPECTED)"
End If
Debug.Print code, state
End Sub
 
Public Sub main()
init
test "GB82 WEST 1234 5698 7654 32", True
test "GB82 TEST 1234 5698 7654 32", False
test "GB81 WEST 1234 5698 7654 32", False
test "SA03 8000 0000 6080 1016 7519", True
test "CH93 0076 2011 6238 5295 7", True
End Sub</lang>{{out}}
<pre>GB82WEST12345698765432 ok
GB82TEST12345698765432 invalid (as expected)
GB81WEST12345698765432 invalid (as expected)
SA0380000000608010167519 ok
CH9300762011623852957 ok</pre>
=={{header|VBScript}}==
<lang vb>
255

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.