54 votes

java.util.UUID.randomUUID (). toString () longueur

Java.util.UUID.randomUUID().toString() de longueur toujours égale à 36?

Je n'ai pas pu trouver d'infos à ce sujet. Ici il est dit que les suivants:

public static UUID randomUUID() Statique usine pour récupérer un type 4 (pseudo généré de façon aléatoire) UUID. L'UUID est généré à l'aide d'un cryptage fort générateur de nombre pseudo-aléatoire. Retourne: Généré de façon aléatoire une UUID

Et qu' type 4 ne me dit rien. Je ne sais pas quel type 4 signifie que dans le cas.

77voto

ruhul Points 1624

Java.util.UUID.randomUUID().toString() de longueur toujours égale à 36?

Oui!! il est.

Un UUID fait un cryptage de 128 bits de la valeur (2). Pour représenter 128 bits en chaîne hexadécimale il sera 128/4=32 char (chaque char est 4 bits de long). Dans un format de chaîne il contient également 4 (-) c'est pourquoi la longueur est de 36.

exemple: 54947df8-0e9e-4471-a2f9-9af509fb5889

32 hex char + 4 trait d'union char = 36 char. De sorte que la longueur sera toujours la même.


Mise à jour:

Je ne sais pas quel type 4 signifie que dans le cas.?

Pour info: Il existe plusieurs façons de générer des UUID. Ici de type 4 signifie que l'uuid est généré à l'aide d'un échantillon aléatoire ou pseudo-aléatoire. À partir de wiki - Universally_unique_identifier#Versions:

Les Versions

Pour les deux variantes 1 et 2, cinq "versions" sont définies dans les normes, et chaque version peut être plus approprié que les autres dans des cas d'utilisation spécifiques. La Version est indiquée par le M dans la représentation sous forme de chaîne.

Version 1 Uuid sont générés à partir d'un temps et d'un id de nœud (généralement de l'adresse MAC);

la version 2 Uuid sont générés à partir d'un identifiant (généralement un groupe ou de l'utilisateur), le temps, et un id de nœud;

les versions 3 et 5 de produire déterministe Uuid généré par le hachage d'un identificateur d'espace de noms et le nom;

et la version 4 Uuid sont générés à l'aide d'un aléatoire ou pseudo-aléatoire.

4voto

Daniel Almeida Points 21

Vous pouvez convertir UUIDv4 16 octets binaires en 24 octets ascii en utilisant base64, au lieu de cela coder en ascii-hex (32 octets)

2voto

user43968 Points 1340

Pour ceux comme moi qui commencer à googler avant de lire la javadoc, ici la javadoc ;)

UUID.toString

Pour ceux qui Ne savent pas lire une grammaire d'arbre de lire du Bas vers le Haut.
un hexDigit est un char
un hexOctet est de 2 hexDigits = 2chars
un nœud est de 6 * hexOctet = 6 * 2hexdigit = 6*2 caractères = 12chars
une variante_and_sequence est de 2 * hexOctet = 2 * 2hexdigit = 2*2 caractères = 4chars
un time_high_and_version est de 2 * hexOctet = 2 * 2hexdigit = 2*2 caractères = 4chars
un time_mid est de 2 * hexOctet = 2 * 2hexdigit = 2*2 caractères = 4chars
un time_low est 4 * hexOctet = 4* 2hexdigit = 4*2 caractères = 8chars
et finalement, un UUID est < time_low > "-" < time_mid > "-" < time_high_and_version > "-" < variant_and_sequence > "-"< node >

= 8 caractères + 1 char + 4 caractères + 1 char + 4 caractères + 1 char + 4 caractères + 1 char + 12 caractères

= 36 chars ! 128 bits de données + 4 trait d'union comme indiqué précédemment

The UUID string representation is as described by this BNF: 

 UUID                   = <time_low> "-" <time_mid> "-"
                          <time_high_and_version> "-"
                          <variant_and_sequence> "-"
                          <node>
 time_low               = 4*<hexOctet>
 time_mid               = 2*<hexOctet>
 time_high_and_version  = 2*<hexOctet>
 variant_and_sequence   = 2*<hexOctet>
 node                   = 6*<hexOctet>
 hexOctet               = <hexDigit><hexDigit>
 hexDigit               =
       "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
       | "a" | "b" | "c" | "d" | "e" | "f"
       | "A" | "B" | "C" | "D" | "E" | "F"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X