web-dev-qa-db-fra.com

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

Est-ce que Java.util.UUID.randomUUID (). ToString () est toujours égal à 36?

Je n'ai pas pu trouver d'informations à ce sujet. Ici on dit seulement ce qui suit:

public statique UUID randomUUID () Fabrique statique permettant de récupérer un UUID de type 4 (généré de manière pseudo-aléatoire). L'UUID est généré à l'aide d'un générateur de nombres pseudo aléatoires de force cryptographique. Returns: Un UUID généré aléatoirement

Et cela type 4 ne me dit rien. Je ne sais pas ce que le type 4 signifie dans le cas.

30
Yaroslav

Est-ce que Java.util.UUID.randomUUID (). ToString () est toujours égal à 36?

Oui !! c'est.

Un UUID en fait une valeur de 128 bits (2 longs). Pour représenter 128 bits en chaîne hexadécimale, il y aura 128/4=32 char (chaque caractère est long de 4 bits). Au format chaîne, il contient également 4 (-) c'est pourquoi la longueur est de 36.

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

32 caractères hexadécimaux + 4 traits d'union = 36 caractères Donc, la longueur sera toujours la même.


Mise à jour:

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

FYI: Il y a plusieurs façons de générer un UUID. Ici, le type 4 signifie que cet uuid est généré en utilisant un nombre aléatoire ou pseudo-aléatoire. De wiki - niversally_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ée 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 Les UUID sont générés à partir d'une heure et d'un identifiant de nœud (généralement l'adresse MAC);

version 2 Les UUID sont générés à partir d'un identifiant (généralement un identifiant de groupe ou d'utilisateur), d'une heure et d'un identifiant de noeud;

les versions 3 et 5 produisent des UUID déterministes générés en hachant un identifiant et un nom d'espace de nom;

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

46
ruhul

Vous pouvez convertir le binaire UUIDv4 16 octets en ascii de 24 octets en utilisant base64, au lieu d’encoder en ascii-hex (32 octets).

3
Daniel Almeida

Pour ceux qui, comme moi, commencent à googler avant de lire le javadoc, voici le javadoc;)

ID.toString

Pour ceux qui ne savent pas comment lire un arbre de grammaire, lire de bas en haut.
un hexDigit est un caractère
un hexOctet est 2 hexDigits = 2chars
a noeud est 6 * hexOctet = 6 * 2hexdigit = 6 * 2 caractères = 12 caractères
a variant _ and_sequence est 2 * hexOctet = 2 * 2hexdigit = 2 * 2 caractères = 4 caractères
a time_high_and_version est égal à 2 * hexOctet = 2 * 2hexdigit = 2 * 2 caractères = 4 caractères
a time_mid est égal à 2 * hexOctet = 2 * 2hexdigit = 2 * 2 caractères = 4 caractères
a time_low est 4 * hexOctet = 4 * 2hexdigit = 4 * 2 caractères = 8 caractères
et enfin, un [~ # ~] uuid [~ # ~] est <time_low> "-" <time_mid> "- "<time_high_and_version>" - "<variante_et_sequence>" - "<noeud>

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

= 36 caractères! 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"
1
user43968