Einzelnen Beitrag anzeigen

musicman56
(Gast)

n/a Beiträge
 
#1

Eindeutiger Zahlenwert für einen String

  Alt 12. Aug 2011, 14:57
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.
  Mit Zitat antworten Zitat