Hallo,
ich muss in eine meiner Datenbanken Daten aus externen Anwendungen (Kontoauszüge aus Banking-Programmen) einlesen, die teilweise keine eindeutige Kennung haben. Also war der Gedanke aus den Daten Auszug-Nr, Konto, BLZ, Verwendungszweck(e) usw. einen String zu bilden, und daraus einen eindeutigen Hash-Wert.
In einem anderen Beitrag in diesem Forum bin ich auch fündig geworden:
Delphi-Quellcode:
// This is a pretty good general purpose string hash function. It is derived
// from the PJWHash and is used inside the UNIX OS
Function HashFromStr(
Const Value:
String): Cardinal;
// ELF-Hash
Var
i: Integer;
x: Cardinal;
Begin
Result := 0;
For i := 1
To Length(Value)
Do Begin
Result := (Result
Shl 4) + Ord(Value[i]);
x := Result
And $F0000000;
If (x <> 0)
Then
Result := Result
Xor (x
Shr 24);
Result := Result
And (
Not x);
End;
End;
Dachte ich zumindest...
Es kommen doppelte Hash-Werte heraus. Hat jemand eine andere oder bessere Idee / Routine / Tipp ?
Natürlich könnte ich aus einigen Feldern ein Datenfeld zusammensetzen und indizieren, aber das möchte ich nicht, weil das nur unnötig die Datenbank aufbläht.