Zitat:
i := i + Ord(s[k]);
Die größeren Hashs machen eher etwa sowas, aber vom Prinzip her ändert sich dabei nichts.
i := i xor (Ord(s[k]) * 12145612) mod 456413);
oder
i := (Ord(s[k]) * 12145612 + i) mod 456413);
ABER:
string
Man sollte immer einen "definierten" Input verwenden.
Hier würde ich UTF-8 oder
Unicode empfehlen (notfalls auch
ANSI, aber besser zukunftsicher, als oldtyle).
Denn solange nur
ASCII in den String rein kommt, ändert sich nichts, aber wenn ab Delphi 2009 der "String" ein UnicodeString und kein AnsiString mehr ist, dann ist das Erbebnis der Berechnungen schnell mal ein Anderes.
Und auch bei älteren Delphis sieht es in einem deutschen Windows anders aus, als in einem russischen Windows. (andere CodePages)