Delphi-Quellcode:
function Modulo10FromString(s : String) : Integer;
var
i : Integer;
begin
Result := 0;
for i := 1 to Length(s) do begin
case i mod 2 of
0 : Result := Result + (Ord(s[i]) * 3);
1 : Result := Result + Ord(s[i]);
else
// Upps, das geht doch garnicht ;-)
end;
end;
Result := Result Mod 10;
end;
Das hätte aber eine 1/3-Gewichtung, die ich in der Formel nicht sehen kann. Daher schaut meine Version aktuell so aus:
Delphi-Quellcode:
function Checksum(const AStr: string): Byte;
var
A: AnsiString;
C: AnsiChar;
I: Integer;
begin
A:= AnsiString(AStr);
I := 0;
for C in A do begin
I := I + Ord(C);
end;
Result := (I mod 10);
end;