Seite 1 von 1
CheckIBAN(IBAN$)
Verfasst: 15.05.2014 23:43
von Rudi
Code: Alles auswählen
EnableExplicit
Procedure CheckIBAN(IBAN$)
Protected i, Divident$, Modulo, LA$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
IBAN$ = UCase(RemoveString(IBAN$, " "))
Protected nIBAN$ = Right(IBAN$, Len(IBAN$)-4) + Left(IBAN$, 4)
For i=1 To Len(LA$)
nIBAN$ = ReplaceString(nIBAN$, Mid(LA$, i, 1), Str(i+9), #PB_String_NoCase)
Next
For i=1 To Len(nIBAN$)
Divident$ = Left(nIBAN$, i)
If Val(Divident$) >= 97
Modulo = Val(Divident$) % 97
Break
EndIf
Next
For i=i+1 To Len(nIBAN$)
Modulo = Val(Str(Modulo) + Mid(nIBAN$, i, 1)) % 97
Next
ProcedureReturn Modulo
EndProcedure
Debug CheckIBAN("DE08 7009 0100 1234 5678 90")
Wenn "1" zurückgegeben wird, dann it's ok, andernfalls nicht.
Re: CheckIBAN()
Verfasst: 18.05.2014 13:46
von Rudi
Das geht aber auch noch einfacher:
Code: Alles auswählen
EnableExplicit
Procedure CheckIBAN(IBAN$)
Protected i, Modulo, LA$ = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
IBAN$ = UCase(RemoveString(IBAN$, " "))
IBAN$ = Mid(IBAN$, 5) + Left(IBAN$, 4)
For i=1 To Len(LA$)
IBAN$ = ReplaceString(IBAN$, Mid(LA$, i, 1), Str(i+9), #PB_String_NoCase) ;Buchstaben in Zahlen tauschen
Next
For i=1 To Len(IBAN$)
Modulo = Val(Str(Modulo) + Mid(IBAN$, i, 1)) % 97
Next
ProcedureReturn Modulo
EndProcedure
Debug CheckIBAN("DE08 7009 0100 1234 5678 90")
Edit: Nocheinmal leicht vereinfacht durch Nics Anregung.
Re: CheckIBAN(IBAN$)
Verfasst: 18.05.2014 14:45
von NicTheQuick
Und hier noch eine kleine Pointerversion:
Code: Alles auswählen
Procedure checkIBAN(IBAN.s)
IBAN = UCase(RemoveString(IBAN, " "))
IBAN = Mid(IBAN, 5) + Left(IBAN, 4)
Protected *c.Character = @IBAN, modulo.i
While *c\c
If (*c\c <= '9')
modulo = (modulo * 10 + *c\c - '0') % 97
Else
modulo = (modulo * 100 + *c\c - 'A' + 10) % 97
EndIf
*c + SizeOf(Character)
Wend
ProcedureReturn modulo
EndProcedure
Re: CheckIBAN(IBAN$)
Verfasst: 18.05.2014 15:15
von Rudi