/ / C # Konvertieren eines Strings in eine eindeutige ID - .net

C # wie man eine Zeichenfolge in eine eindeutige ID - .net konvertiert

Nehmen wir an, wir haben string name = "stackoverflow.com";

wie man diesen String int in eine eindeutige ID oder eine Art Hash konvertiert. (kein md5, weil es zu groß ist) und es sollte nicht zufällig sein

Ich möchte so etwas haben

Bitte beachten Sie, dass die Zeichenfolge selbst zu groß ist. Ich würde gerne wissen, ob die Zeichenfolge kürzer geschrieben werden kann. in einer Kombination aus Buchstaben, Zahlen und Symbolen

f¤k ^ § ~ 7d? Æ

Antworten:

6 für die Antwort № 1

Dies ist unmöglich, ohne Ihre Domain einzuschränken. Es gibt unendlich viele strings und können daher nicht in eine endliche Menge injiziert werden. Daher ist eine Eindeutigkeit unmöglich.

Wenn Sie wirklich eine eindeutige Kennung für möchten string, benutze die string selbst.


1 für die Antwort № 2

Wenn Sie einen Hash verwenden, muss dieser ausreichend lang sein, um eindeutig zu sein, und das ist wahrscheinlich länger als gewünscht. Du brauchst 2^(BitLength/2) >> n Dabei ist BitLength die Länge des Hash und n die Anzahl der Zeichenfolgen.

Wie wäre es einfach mit einem Dictinary<string,int> und ein Zähler statt?


0 für die Antwort № 3

name.GetHashCode ()

Dies ist wahrscheinlich die beste Wahl. Es ist ein häufiges Problem bei jeder Form von Hash, dass nicht garantiert werden kann, dass er eindeutig ist, aber Sie können die Wahrscheinlichkeit, dass er eindeutig ist, deutlich erhöhen, indem Sie zulassen, dass der Hash länger ist.

Sie können auch unterschiedliche Hash-Algorithmen zusammen verwenden, um die unterstützte Reichweite zu erhöhen

BEARBEITEN

Dann können Sie eine benutzerdefinierte Hashcode-Funktion erstellen, z

public static int GetHashCode (string value )
{
int h = 0;
for (int i = 0; i < value.Length; i ++)
h += value [i] * 31 ^ value.Length - (i + 1);
return h;
}

(Von woanders gestohlen)


0 für die Antwort № 4

Jason hat vollkommen recht - Sie können keinen endlichen eindeutigen Hash einer Zeichenfolge erstellen, der beliebig lang sein kann. Ich sage Ihnen, dass das, was Sie suchen, kein Hash ist, sondern ein Komprimierungsalgorithmus für kurze Zeichenfolgen.