Wie erstellen Sie benutzerfreundliche eindeutige IDs, UUIDs oder andere eindeutige Bezeichner in Java
Ich in der Regel verwenden Sie die UUID-Klasse zum generieren eindeutiger IDs. Dies funktioniert gut, wenn diese IDs verwendet werden, die durch technische Systeme nur, es interessiert Sie nicht, wie lang Sie sind:
System.out.println(UUID.randomUUID().toString());
> 67849f28-c0af-46c7-8421-94f0642e5d4d
Ist es eine nette Möglichkeit zum erstellen von Benutzer-freundlicher unique-IDs (wie die von tinyurl), die sind etwas kürzer als die UUIDs? Anwendungsfall: Sie möchten, senden Sie die IDs per E-Mail an Ihre Kunden, die wiederum Ihre Website zu besuchen und geben Sie diese Zahl in eine form, wie ein Gutschein-ID.
Ich gehe davon aus, dass UUIDs generiert gleichmäßig durch die ganze Bandbreite des 128-Bit-Bereich der UUID. So wäre es weiser, einfach den unteren 64 Bits zum Beispiel?
System.out.println(UUID.randomUUID().getLeastSignificantBits());
Jedes feedback ist willkommen.
- Ist es nicht besser, wenn Ihre Benutzer können auf einen link klicken, wo die id enthalten ist-und Sie kümmern sich um die Eingabe der id im Formular-Feld oder Parameter Lesen, dann brauchen Sie sich nicht um die id, die die Benutzer-freundliche
- Sicher, aber die id wird in print-Medien. Also um So kürzer, desto besser.
- Für eine druckbare URLs, reduzieren die Wahrscheinlichkeit von menschlichen Fehlern, die durch Verwendung von Base32 Codierung. Ich persönlich glaube, dass die z-base-32-format ist das beste für diesen Zweck, denn es wurde speziell entwickelt, um verwendet werden, von Menschen.
- Ich bin mir ziemlich sicher, TinyURL und andere kurz-url-Dienste nur erhalten eine Liste aller verwendeten UUIDs, und weisen Sie einen auto-increment index zu Ihnen, und verwendet die base-64-version der display-ID. So erhalten Sie URLs wie
http://tinyurl.com/2
undhttp://bit.ly/2
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
First off, Ihre Annahme falsch sein, je nach der UUID-Typ (1, 2, 3, oder 4). Von die UUID Java docs:
Der beste Weg, das zu tun, was Sie tun, ist zur Generierung einer zufälligen Zeichenfolge, deren code sieht ungefähr so aus (Quelle):
Wenn Sie sind unglaublich besorgt über Zusammenstöße oder sowas, ich schlage vor, Sie
base64
Kodieren Ihre UUID, die sollte nach unten geschnitten auf Ihre Größe.Moral von der Geschichte: verlassen Sie sich nicht auf einzelne Teile von UUIDs, wie Sie sind ganzheitlich angelegt. Wenn Sie tun müssen, verlassen Sie sich auf einzelne Teile einer UUID, stellen Sie sicher, dass Sie machen Sie sich vertraut mit den besonderen UUID-Typ und Implementierung.
Random
. Es ist auchSecureRandom
denen sollte viel schwerer zu prognostizieren (möglicherweise oder möglicherweise kein Problem sein, aber Dinge wie session-keys sind eine Anwendung, wo Sie nicht wollen, eine naive LCG). Was die OP beschreibt mit Gutschein-IDs könnte auch ein Fall, wo Sie nicht möchten, dass eine zufällige person behaupten, jemand anderes.67849f28-c0af-46c7-8421-94f0642e5d4d
istNjc4NDlmMjgtYzBhZi00NmM3LTg0MjEtOTRmMDY0MmU1ZDRk
. Also das fallback-Methode nicht wirklich zurück geschnitten, die Größe.Hier ist ein weiterer Ansatz für die Generierung von Benutzer-freundlich-IDs:
http://thedailywtf.com/Articles/The-Automated-Curse-Generator.aspx
(Aber Sie sollten gehen für die bad-word-filter)
Jede UUID/Guid ist 16 Bytes of data. Diese 16 bytes werden kann leicht codiert BASE64 (oder BASE64url), dann abgestreift, die " = " - Zeichen am Ende der Zeichenfolge.
Das gibt einen schönen, kurzen Schnur, die hält immer noch die gleichen Daten wie die UUID/Guid. In anderen Worten, ist es möglich, die neu UUID/Guid aus, dass die Daten, wenn eine solche notwendig wird.
Hier ist eine Möglichkeit zum erzeugen des URL-freundliche 22-stellige UUID
Für deinen use-case, würde es besser sein, zu verfolgen, eine laufende Zählung der registrierten Benutzer und für jeden Wert erzeugen einer string-token wie diese:
Sicherheitsgründen, es wäre besser, wenn Sie die Werte nicht sequenziell, also jedes mal, wenn sich ein Benutzer anmeldet, können Sie erhöhen den Wert sagen wir mal durch 1024 (Das wäre gut zu uuids für 2^64 /2^10 = 2^54 Nutzer, die ganz sicher mehr, als Sie jemals brauchen 🙂
Nur für dich 🙂 :
Random
. Es ist auchSecureRandom
denen sollte viel schwerer zu prognostizieren (möglicherweise oder möglicherweise kein Problem sein, aber Dinge wie session-keys sind eine Anwendung, wo Sie nicht wollen, eine naive LCG). Was die OP beschreibt mit Gutschein-IDs könnte auch ein Fall, wo Sie nicht möchten, dass eine zufällige person behaupten, jemand anderes.System.nanoTime()
würde auch zuverlässiger.Wie über dieses? Eigentlich ist dieser code gibt 13 Zeichen(zahlen und Kleinbuchstaben Alphabete) max.