So erstellen Sie benutzerfreundliche eindeutige IDs, UUIDs oder andere eindeutige Bezeichner in Java

8

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.

    
basZero 12.01.2011, 08:28
quelle

6 Antworten

9
  

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 :

  

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:

%Vor%
  

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.

    
David Titarenco 12.01.2011, 08:40
quelle
2

Hier ist ein weiterer Ansatz zum Generieren benutzerfreundlicher IDs:
Ссылка

(Aber Sie sollten für den Bad-Word-Filter gehen)

    
Cephalopod 12.01.2011 09:15
quelle
2

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.

    
JensG 01.06.2013 17:23
quelle
1

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:)

    
Lior 16.05.2014 21:21
quelle
0

Nur für dich :):

%Vor%     
AlexR 12.01.2011 08:37
quelle
0

Wie wäre es mit diesem? Tatsächlich gibt dieser Code maximal 13 Zeichen (Zahlen und Kleinbuchstaben) max.

zurück %Vor%     
sanghoon2 19.06.2013 05:10
quelle

Tags und Links