Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Rudi
Beiträge: 143 Registriert: 22.04.2010 18:28
Wohnort: #PB_Any
Beitrag
von Rudi » 15.05.2014 23:43
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.
Zuletzt geändert von
Rudi am 18.05.2014 13:47, insgesamt 1-mal geändert.
Win7 (x64) •
PB 5.4x (x86) •
5,7 Windows-Leistungsindex •
Suche
Rudi
Beiträge: 143 Registriert: 22.04.2010 18:28
Wohnort: #PB_Any
Beitrag
von Rudi » 18.05.2014 13:46
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.
Zuletzt geändert von
Rudi am 18.05.2014 19:24, insgesamt 1-mal geändert.
Win7 (x64) •
PB 5.4x (x86) •
5,7 Windows-Leistungsindex •
Suche
NicTheQuick
Ein Admin
Beiträge: 8679 Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200 Ubuntu 22.04.3 LTS GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:
Beitrag
von NicTheQuick » 18.05.2014 14:45
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
Rudi
Beiträge: 143 Registriert: 22.04.2010 18:28
Wohnort: #PB_Any
Beitrag
von Rudi » 18.05.2014 15:15
Win7 (x64) •
PB 5.4x (x86) •
5,7 Windows-Leistungsindex •
Suche