Ich habe eine Liste von Benutzerkennungen, die ziemlich lang sind. Die Identifikatoren sind möglicherweise nicht jedes Mal genau identisch, wenn sie mit einer HTTP-Anfrage kommen, deshalb benutze ich einen unscharfen Zeichenfolgenvergleich, um den Benutzer zu authentifizieren. Aus diesem Grund konnte ich den Bezeichner nicht hashen, weil mein Algorithmus für die Fuzzy-String-Vergleiche nicht mit den Hash-Werten arbeiten würde, da sogar geringfügig unterschiedliche Klartexte beim Haschvorgang völlig unterschiedliche Werte ergeben. Gibt es nun einen Algorithmus algx, so dass die Entfernung (s1, s1 ') in gewisser Weise proportional zur Entfernung ist (algx (s1), algx (s1'))? Oder gibt es einen anderen Weg, um das Problem zu lösen? Hinweis: Abstand in diesem Sinne bedeutet die Menge an Bearbeitung benötigt, um einen Text in einen anderen zu verwandeln.Zwei Strings so transformieren, dass der Abstand zwischen den Input Strings im Abstand zwischen den Output Strings "reflektiert" wird?
Antwort
Klingt, als ob Sie nach suchen.
Siehe http://stackoverflow.com/questions/5769949/locality-sensitive-hash-implementation – Kaganar
Hallo Jouni K. Seppänen - gibt es eine Java-Implementierung, die Sie vorschlagen? –
Sie könnten etwas wie Levenshtein distance verwenden, das den Unterschied zwischen 2 Strings misst. Es gibt auch eine PHP function mit dem gleichen Namen.
Eine Lösung besteht darin, jedes Alphabet zu zählen und die Anzahl der Arrays zu vergleichen. Eine schlechte Übereinstimmung zwischen den Zählwerten bedeutet, dass die Strings definitiv nicht ähnlich sind.
Warten Sie, dies ist für die Benutzerauthentifizierung? Warum sollten Sie niemals auf Genauigkeit achten (Groß-/Kleinschreibung)? –
Der Bezeichner kann sich ein wenig ändern, da er aus der Browser-Konfiguration generiert wird und sich möglicherweise ändert. Dies ist keine Basisauthentifizierung, sondern eine Sicherheitsverstärkung neben der Standardauthentifizierung. –
Muss es die "Entfernung" zwischen Strings sein? Transforming, so dass die "Entfernung" zwischen ihrer binären Darstellung einfacher sein könnte. – Widor