Comment les UUID sont créés
Un UUID fait 128 bits, écrits en 32 chiffres hexadécimaux répartis en cinq groupes. Quatre bits indiquent la version et deux ou trois bits la variante ; le reste dépend de la version. La RFC 9562, publiée en 2024, a remplacé l’ancienne RFC 4122 et ajouté les versions 6, 7 et 8.
v4 xxxxxxxx-xxxx-4xxx-Vxxx-xxxxxxxxxxxx v7 tttttttt-tttt-7ccc-Vxxx-xxxxxxxxxxxx t = Unix time in ms (48 bits) c = counter or random (12 bits) x = random, V = 8, 9, a or b
La version 4 remplit les 122 autres bits de données aléatoires ; cette page les demande au générateur aléatoire cryptographique de votre navigateur. La version 7 commence par l’heure Unix en millisecondes (48 bits), si bien que les UUID créés plus tard se trient après les précédents, et remplit le reste de bits aléatoires. Quand plusieurs sont créés dans la même milliseconde, les 12 bits qui suivent la version servent de compteur, comme le permet la RFC 9562, de sorte qu’une liste de 1 000 reste ordonnée.
Le vérificateur lit les bits de version et de variante de n’importe quel UUID et, pour les versions 1, 6 et 7, l’heure qui y est stockée. Un UUID v4 ne porte aucune heure : on n’en tire rien d’autre que sa version.
Exemple
L’exemple de la RFC 9562 est 017f22e2-79b0-7cc3-98c4-dc0c0c07398f. Les 12 premiers chiffres hexadécimaux, 017f22e279b0, valent 1 645 557 742 000 millisecondes depuis 1970 : le 22 février 2022, 19:22:22 UTC. Le 7 après le deuxième trait d’union est la version, et le 9 après le troisième marque la variante standard.
Questions
UUID v4 ou v7 : lequel utiliser ?
Utilisez v7 pour les clés primaires de base de données : les nouvelles lignes reçoivent des identifiants plus grands et vont donc à la fin de l’index plutôt qu’à des endroits aléatoires, ce qui garde les insertions rapides et les index compacts. Utilisez v4 quand l’identifiant ne doit pas révéler quand il a été créé, par exemple dans un lien public. Les deux sont assez uniques pour tout usage pratique.
Deux UUID peuvent-ils être identiques ?
En théorie oui, en pratique non. Un UUID v4 a 122 bits aléatoires : il faudrait en créer environ 2,7 trillions (2,7 × 10^18) pour avoir 50 % de chances d’obtenir un seul doublon. Un UUID v7 a 62 à 74 bits aléatoires derrière son timestamp en millisecondes, selon la façon dont il est créé : une collision demanderait un nombre énorme d’UUID créés dans la même milliseconde. Ce sont les mauvais générateurs de nombres aléatoires, pas le format, qui causent les doublons.
Un GUID est-il la même chose qu’un UUID ?
Oui. GUID est le nom que Microsoft donne au même identifiant de 128 bits, et Guid.NewGuid() en .NET crée un UUID version 4. Les outils Microsoft écrivent souvent les GUID en majuscules et entre accolades : utilisez les options ci-dessus pour obtenir cette forme.
Un UUID v7 révèle-t-il quand il a été créé ?
Oui, à la milliseconde près : collez-en un dans le vérificateur ci-dessus et il affiche l’heure. C’est ce qui les fait bien se trier, mais cela dit aussi à quiconque voit l’identifiant quand l’enregistrement a été créé. Si cela compte, utilisez v4 pour les identifiants que vous montrez publiquement.
Comment créer un UUID en ligne de commande ?
Sous Linux : cat /proc/sys/kernel/random/uuid ou uuidgen. Sous macOS : uuidgen (en majuscules). Dans PostgreSQL : gen_random_uuid() pour v4, et uuidv7() à partir de la version 18. En Python : import uuid; uuid.uuid4(), et uuid.uuid7() à partir de Python 3.14. En JavaScript : crypto.randomUUID().