Dieses "csmax" kann man sich schenken.
Bei der Modulo-Arithmetik rechnet man einfach nach jeder Operation mit
mod 97
:
Delphi-Quellcode:
FUNCTION CreateGermanIBAN(
Const BankCode,Account:
String):
String;
var cs, i,
cc:integer; s:
string;
begin
if (Length(BankCode)<>8)
or (Length(Account)<>10)
then Exit('
');
s:=BankCode+Account+'
131400';
// 131400 = 'DE00'
cs:=0;
for i:=1
to Length(s)
do begin
cs:=(cs*10+Ord(s[i])-Ord('
0'))
mod 97;
end;
cc:=98-cs;
if cc<2
then inc(
cc,97);
// 00-->97, 01--> 98
result:='
DE00';
result[3]:=Chr(
cc div 10+Ord('
0'));
result[4]:=Chr(
cc mod 10+Ord('
0'));
result:=result+BankCode+Account;
end;
Ja, mit der Folge dass man etwa 10 Mal soviel Mod Operationen braucht.
Mag sein, dass sich das nicht gewaltig auswirkt, aber ich denke man sollte immer auch auf die Performance achten.