Oh, hier hat sich ja einiges getan (ich war zwei Tage weg). Inzwischen (eine Nacht darüber schlafen...) war mir schon aufgegangen, dass die Zwischenspeicherung in einem Array nicht erforderlich ist und eine einzige Programmschleife zur Verarbeitung genügt. Auch die DIV- und MOD-Operationen zur Basis 10 braucht man gar nicht - man kann ja zwei Ziffern auf einmal verarbeiten. Die Lösung schaut dann so aus:
Delphi-Quellcode:
function checkIban(const sIban: String): boolean;
var k,n,rest: integer; c: char;
begin
result:= false;
n:= length(sIban);
if (n < 5) or (n > 34) then exit;
rest:= 0; k:= 5;
repeat // Zeichen der IBAN in geänderter Reihenfolge per Modulo-97 prüfen
c:= sIban[k];
case c of
'0'..'9': // Ziffer als solche berücksichtigen
rest:= (rest * 10 + ord(c) - 48) mod 97;
'A'..'Z': // 'A' wie '10, 'B' wie '11' usw.
rest:= (rest * 100 + ord(c) - 55) mod 97
else exit
end;
inc(k);
if k > n then k:= 1
until k = 5;
result:= (rest = 1)
end;
Die Modulo-97-Reste nur einmal zu berechnen und in einer Tabelle zu speichern, ist eine gute Idee, Amateurprofi! Für meine Zwecke lohnt das aber nicht wirklich. Massenverabeitung heißt in meinem Fall, dass es um einige 10.000 Datensätze geht, und jede Verarbeitung unter einer Sekunde ist gut - den Bereich haben wir ja locker erreicht...
Viele Grüße
Michael