4. Format UUID
4. Format UUID
Le format UUID a une taille de 16 octets (128 bits); les bits de variante en conjonction avec les bits de version décrits dans les sections suivantes déterminent une structure plus fine. En termes de ces formats et dispositions UUID, les définitions de bits commencent à 0 et se terminent à 127, tandis que les définitions d'octets commencent à 0 et se terminent à 15.
En l'absence de spécification explicite du protocole d'application ou de présentation au contraire, chaque champ est encodé avec l'octet le plus significatif en premier (connu sous le nom d'"ordre des octets réseau").
L'enregistrement des UUID au format binaire se fait en séquençant tous les champs au format big-endian. Cependant, il existe une mise en garde connue selon laquelle les GUID du modèle d'objet de composant (Component Object Model, COM) de Microsoft utilisent le little-endian lors de l'enregistrement des GUID. La discussion de ceci (voir [MS_COM_GUID]) est en dehors de la portée de cette spécification.
Les UUID PEUVENT être représentés sous forme de données binaires ou d'entiers. Lorsqu'ils sont utilisés avec des URN ou comme texte dans des applications, tout UUID donné doit être représenté par le format de chaîne "hexadécimal et tiret" composé de plusieurs groupes de caractères hexadécimaux alphanumériques majuscules ou minuscules séparés par des tirets simples. Lorsqu'ils sont utilisés avec des bases de données, veuillez vous référer à la Section 6.13.
La définition formelle de la représentation de chaîne UUID est fournie par l'ABNF suivant [RFC5234]:
UUID = 4hexOctet "-"
2hexOctet "-"
2hexOctet "-"
2hexOctet "-"
6hexOctet
hexOctet = HEXDIG HEXDIG
DIGIT = %x30-39
HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F"
Notez que les caractères alphabétiques peuvent être tous en majuscules, tous en minuscules ou en casse mixte, conformément à la Section 2.3 de [RFC5234]. Un exemple d'UUID utilisant cette représentation textuelle de l'ABNF ci-dessus est montré dans la Figure 1.
f81d4fae-7dec-11d0-a765-00a0c91e6bf6
Figure 1: Exemple de format UUID en chaîne
Le même UUID de la Figure 1 est représenté en binaire (Figure 2), en tant qu'entier non signé (Figure 3) et en tant qu'URN (Figure 4) défini par [RFC8141].
111110000001110101001111101011100111110111101100000100011101000
01010011101100101000000001010000011001001000111100110101111110110
Figure 2: Exemple d'UUID binaire
329800735698586629295641978511506172918
Figure 3: Exemple d'UUID entier non signé (affiché sous forme de nombre décimal)
urn:uuid:f81d4fae-7dec-11d0-a765-00a0c91e6bf6
Figure 4: Exemple d'espace de noms URN pour UUID
Il existe de nombreuses autres façons de définir un format UUID; quelques exemples sont détaillés ci-dessous. Veuillez noter que ceci n'est pas une liste exhaustive et n'est fourni qu'à titre informatif.
- Certaines implémentations UUID, telles que celles trouvées dans [Python] et [Microsoft], produiront des UUID avec le format de chaîne, y compris les tirets, entourés d'accolades.
- [X667] fournit des définitions de format UUID pour l'utilisation d'UUID avec un OID.
- [IBM_NCS] est une implémentation héritée qui produit un format UUID unique compatible avec la variante 0xx du Tableau 1.
4.1. Champ de variante
Le champ de variante détermine la disposition de l'UUID. C'est-à-dire que l'interprétation de tous les autres bits de l'UUID dépend du réglage des bits dans le champ de variante. En tant que tel, il pourrait être appelé plus précisément un champ "type"; nous conservons le terme original pour la compatibilité. Le champ de variante se compose d'un nombre variable des bits les plus significatifs de l'octet 8 de l'UUID.
Le Tableau 1 liste le contenu du champ de variante, où la lettre "x" indique une valeur "sans importance".
| MSB0 | MSB1 | MSB2 | MSB3 | Variante | Description |
|---|---|---|---|---|---|
| 0 | x | x | x | 1-7 | Réservé. Compatibilité descendante du système de calcul en réseau (Network Computing System, NCS) et inclut l'UUID nul conformément à la Section 5.9. |
| 1 | 0 | x | x | 8-9,A-B | La variante spécifiée dans ce document. |
| 1 | 1 | 0 | x | C-D | Réservé. Compatibilité descendante de Microsoft Corporation. |
| 1 | 1 | 1 | x | E-F | Réservé pour une définition future et inclut l'UUID maximum conformément à la Section 5.10. |
Tableau 1: Variantes UUID
L'interopérabilité, sous quelque forme que ce soit, avec des variantes autres que celle définie ici n'est pas garantie mais n'est pas susceptible d'être un problème en pratique.
Spécifiquement pour les UUID dans ce document, les bits 64 et 65 de l'UUID (bits 0 et 1 de l'octet 8) DOIVENT être définis sur 1 et 0 comme spécifié dans la ligne 2 du Tableau 1. En conséquence, toutes les dispositions de bits et de champs évitent l'utilisation de ces bits.
4.2. Champ de version
Le numéro de version se trouve dans les 4 bits les plus significatifs de l'octet 6 (bits 48 à 51 de l'UUID).
Le Tableau 2 liste toutes les versions pour cette variante UUID 10xx spécifiée dans ce document.
| MSB0 | MSB1 | MSB2 | MSB3 | Version | Description |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | Inutilisé. |
| 0 | 0 | 0 | 1 | 1 | L'UUID basé sur l'heure grégorienne spécifié dans ce document. |
| 0 | 0 | 1 | 0 | 2 | Réservé pour la version de sécurité DCE, avec des UUID POSIX intégrés. |
| 0 | 0 | 1 | 1 | 3 | La version basée sur le nom spécifiée dans ce document qui utilise le hachage MD5. |
| 0 | 1 | 0 | 0 | 4 | La version générée aléatoirement ou pseudo-aléatoirement spécifiée dans ce document. |
| 0 | 1 | 0 | 1 | 5 | La version basée sur le nom spécifiée dans ce document qui utilise le hachage SHA-1. |
| 0 | 1 | 1 | 0 | 6 | UUID basé sur l'heure grégorienne réordonné spécifié dans ce document. |
| 0 | 1 | 1 | 1 | 7 | UUID basé sur l'heure de l'époque Unix spécifié dans ce document. |
| 1 | 0 | 0 | 0 | 8 | Réservé pour les formats UUID personnalisés spécifiés dans ce document. |
| 1 | 0 | 0 | 1 | 9 | Réservé pour une définition future. |
| 1 | 0 | 1 | 0 | 10 | Réservé pour une définition future. |
| 1 | 0 | 1 | 1 | 11 | Réservé pour une définition future. |
| 1 | 1 | 0 | 0 | 12 | Réservé pour une définition future. |
| 1 | 1 | 0 | 1 | 13 | Réservé pour une définition future. |
| 1 | 1 | 1 | 0 | 14 | Réservé pour une définition future. |
| 1 | 1 | 1 | 1 | 15 | Réservé pour une définition future. |
Tableau 2: Versions de variante UUID 10xx définies par cette spécification
Un exemple de disposition version/variante pour UUIDv4 suit le tableau où "M" représente le placement de version pour la représentation hexadécimale de 0x4 (0b0100) et "N" représente le placement de variante pour l'une des quatre représentations hexadécimales possibles de la variante 10xx: 0x8 (0b1000), 0x9 (0b1001), 0xA (0b1010), 0xB (0b1011).
00000000-0000-4000-8000-000000000000
00000000-0000-4000-9000-000000000000
00000000-0000-4000-A000-000000000000
00000000-0000-4000-B000-000000000000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
Figure 5: Exemples de variantes UUIDv4
Il convient de noter que les autres variantes UUID restantes trouvées dans le Tableau 1 utilisent différents mécanismes de sous-typage ou de versioning. L'enregistrement et la définition des combinaisons de variantes UUID et de sous-typage restantes sont en dehors de la portée de ce document.