Normalerweise verwende ich die UUID-Klasse, um eindeutige IDs zu generieren. Dies funktioniert gut, wenn diese IDs nur von technischen Systemen verwendet werden, ihnen ist es egal, wie lange sie sind:
%Vor%Gibt es eine nette Möglichkeit, benutzerfreundliche eindeutige IDs (wie die von tinyurl) zu erstellen, die etwas kürzer sind als die UUIDs? Usecase: Sie möchten IDs per E-Mail an Ihre Kunden senden, die wiederum Ihre Website besuchen und diese Nummer in ein Formular wie eine Gutschein-ID eingeben.
Ich nehme an, dass UUIDs gleichmäßig über den gesamten Bereich des 128-Bit-Bereichs der UUID generiert werden. Wäre es also weise, nur die unteren 64 Bits zu verwenden?
%Vor%Jede Rückmeldung ist willkommen.
Ich nehme an, dass UUIDs generiert werden gleichermaßen durch die gesamte Palette der 128 Bit-Bereich der UUID.
Zunächst einmal ist Ihre Annahme möglicherweise falsch, abhängig vom UUID-Typ (1, 2, 3 oder 4). Von den Java UUID-Dokumenten :
%Vor%Es gibt verschiedene Varianten von diese globalen Identifikatoren. Die Methoden dieser Klasse sind zur Manipulation der Leach-Salz-Variante, obwohl die Konstruktoren erlauben die Erstellung von beliebigen Variante von UUID (unten beschrieben).
Der Aufbau einer Variante 2 (Leach-Salz) UUID ist wie folgt: Am meisten signifikant lang besteht aus der folgende unsignierte Felder:
%Vor%Das am wenigsten signifikante lange besteht aus die folgenden unsignierten Felder:
Das Variantenfeld enthält einen Wert welches das Layout des UUID. Das oben beschriebene Bit-Layout gilt nur für eine UUID mit einem Variantenwert von 2, der angibt die Leach-Salz-Variante.
Das Versionsfeld enthält einen Wert, der beschreibt den Typ dieser UUID. Dort sind vier verschiedene Grundtypen von UUIDs: zeitbasiert, DCE-Sicherheit, Namensbasiert und zufällig generiert UUIDs. Diese Typen haben eine Version Wert von 1, 2, 3 bzw. 4.
Der beste Weg, um das zu tun, was Sie tun, ist eine zufällige Zeichenfolge mit Code zu erzeugen, der ungefähr so aussieht ( Quelle ):
%Vor% Wenn Sie unglaublich besorgt sind über Kollisionen oder Ähnliches, schlage ich vor, dass Sie base64
für Ihre UUID codieren, die ihre Größe reduzieren sollte.
Moral der Geschichte: Verlassen Sie sich nicht auf einzelne Teile von UUIDs, da diese ganzheitlich gestaltet sind. Wenn Sie sich auf einzelne Teile einer UUID verlassen müssen, sollten Sie sich mit dem jeweiligen UUID-Typ und der Implementierung vertraut machen.
Hier ist ein weiterer Ansatz zum Generieren benutzerfreundlicher IDs:
Ссылка
(Aber Sie sollten für den Bad-Word-Filter gehen)
Jede UUID / Guid ist nur 16 Bytes von Daten. Diese 16 Bytes können einfach mit BASE64 (oder BASE64url) codiert werden und dann alle Zeichen "=" am Ende der Zeichenfolge entfernt werden.
Dies ergibt eine nette, kurze Zeichenkette, die immer noch dieselben Daten wie die UUID / Guid enthält. Mit anderen Worten, es ist möglich, die UUID / Guid aus diesen Daten neu zu erstellen, wenn dies notwendig wird.
Hier können Sie eine URL-freundliche UUID mit 22 Zeichen erstellen
%Vor%Für Ihren Anwendungsfall wäre es besser, eine laufende Anzahl registrierter Benutzer zu verfolgen und für jeden Wert ein Zeichenfolgen-Token wie dieses zu generieren:
%Vor%Aus Sicherheitsgründen wäre es besser, wenn Sie die Werte nicht sequentiell setzen. Bei jeder Benutzerregistrierung können Sie also den Wert um 1024 erhöhen (das wäre gut, um UUIDs für 2 ^ 64/2 zu generieren ^ 10 = 2 ^ 54 Benutzer, das ist sicherlich mehr, als Sie jemals brauchen würden:)