Passer au contenu

Générateur UUID Gratuit - Créez des UUID V1 & V4 Instantanément

Générez des identifiants uniques instantanément avec notre générateur UUID gratuit. Créez des UUID Version 1 (basés sur le temps) et Version 4 (aléatoires) pour les bases de données, les API et les systèmes distribués.

Générateur UUID

Version UUID
UUID généré
Calculateur de chargement...
📚

Documentation

Générateur d’UUID

Un générateur d’UUID est un outil qui crée un identifiant universel unique (UUID, pour Universally Unique Identifier) : un code de 128 bits servant à étiqueter une donnée de sorte qu’aucun autre élément, nulle part, n’ait de chances de porter la même étiquette. Cette page génère des UUID de version 1 (fondés sur le temps) et de version 4 (aléatoires).

Qu’est-ce qu’un UUID ?

Un UUID est un nombre de 128 bits écrit sous la forme de 32 chiffres hexadécimaux (les caractères 0-9 et a-f). Il est divisé en cinq groupes séparés par des traits d’union, selon le motif 8-4-4-4-12, soit 36 caractères au total. Voici un exemple d’UUID :

1550e8400-e29b-41d4-a716-446655440000
2

Les UUID sont définis par une norme de l’Internet Engineering Task Force. La première version de cette norme, la RFC 4122, a été publiée en juillet 2005. Elle a été remplacée en mai 2024 par la RFC 9562, qui rend obsolète la RFC 4122 et ajoute de nouvelles versions. Les logiciels utilisent les UUID pour identifier des lignes de bases de données, des fichiers et d’autres enregistrements sans avoir besoin d’une autorité centrale pour attribuer les numéros. Comme l’espace des UUID possibles est très vaste, deux ordinateurs peuvent générer des UUID indépendamment, au même instant, sans presque jamais produire le même.

Format et structure d’un UUID

Les 128 bits d’un UUID sont répartis en champs nommés. Chaque champ occupe un nombre fixe de bits :

  • time_low : 32 bits
  • time_mid : 16 bits
  • time_hi_and_version : 16 bits
  • clock_seq_hi_and_reserved : 8 bits
  • clock_seq_low : 8 bits
  • node : 48 bits
Disposition des champs d’un UUID time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

Quatre bits de time_hi_and_version indiquent le numéro de version de l’UUID, et deux bits de clock_seq_hi_and_reserved indiquent la variante, qui précise au logiciel comment lire les autres champs.

Comment générer un UUID avec cet outil

  1. Choisissez une version : version 1 (fondée sur le temps) ou version 4 (aléatoire).
  2. Sélectionnez « Générer ». L’outil construit aussitôt un nouvel UUID de 128 bits.
  3. Sélectionnez « Copier » pour copier le résultat dans le presse-papiers.
  4. Collez l’UUID dans du code, une base de données ou un fichier de configuration.

La version 4 convient à la plupart des usages, comme les clés de base de données, car elle ne contient aucune information sur le moment ni le lieu de sa création. La version 1 enregistre le moment de sa création, ce qui peut aider à savoir quand un enregistrement a été créé.

UUID version 1 et version 4

La version 1 encode l’horodatage courant, ainsi qu’une séquence d’horloge et une valeur de nœud. La norme d’origine permettait que la valeur de nœud soit la véritable adresse réseau (MAC) d’un ordinateur. La norme plus récente indique que les adresses MAC présentent des risques pour la vie privée et ne doivent pas être utilisées ; elle autorise à la place une valeur de nœud aléatoire. Cet outil emploie toujours des bits aléatoires pour le nœud ; ses UUID de version 1 ne lisent donc ni n’exposent jamais une véritable adresse MAC. Comme la norme l’exige pour un nœud aléatoire, l’outil met à 1 le bit de poids faible du premier octet du nœud (le bit de multidiffusion), ce qui indique que le nœud est aléatoire et non une véritable adresse réseau. L’horloge de l’outil lit l’heure en millisecondes ; les plus petits pas de l’horodatage sont donc toujours nuls.

Les UUID de version 1 ne se trient pas par date de création lorsqu’on les traite comme du texte. La partie de l’horodatage qui change le plus vite, time_low, vient en premier ; un UUID plus récent peut donc se trier avant un plus ancien. La RFC 9562 ajoute la version 6, une forme réordonnée de la version 1 pour un meilleur ordonnancement dans les bases de données, et indique que les nouveaux systèmes devraient utiliser la version 7 plutôt que les versions 1 et 6 lorsque c’est possible.

La version 4 est construite à partir de bits aléatoires, dont quelques-uns sont fixés pour indiquer la version et la variante. Elle ne contient ni horodatage ni donnée propre à une machine ; elle ne révèle donc rien sur le moment ni le lieu de sa création. Elle ne peut pas être triée par ordre de création.

D’autres versions existent dans la norme, mais cet outil ne les génère pas. La version 2 est réservée à DCE Security. Les versions 3 et 5 sont construites en hachant un espace de noms et un nom avec MD5 ou SHA-1, de sorte que la même entrée produit toujours le même UUID. Les versions 6, 7 et 8 ont été ajoutées par la RFC 9562.

Comment calculer un UUID (formule)

Version 4 :

  1. Générez 128 bits aléatoires. L’outil obtient ces bits auprès de l’API Web Crypto (crypto.getRandomValues), une source cryptographiquement sûre ; il ne se rabat sur Math.random que si cette API est absente.
  2. Fixez les quatre bits de version, le premier chiffre hexadécimal du troisième groupe, à 0100 (hexadécimal 4).
  3. Fixez les deux bits de poids fort du quatrième groupe à 10 (le premier chiffre hexadécimal de ce groupe est donc 8, 9, a ou b).

Seuls 122 des 128 bits sont aléatoires, puisque 6 bits sont fixés par les étapes 2 et 3. Cela donne 2^122, soit environ 5,3 × 10^36, UUID de version 4 possibles.

Version 1 :

  1. Prenez l’heure courante sous la forme d’un nombre d’intervalles de 100 nanosecondes écoulés depuis le 15 octobre 1582, date de la réforme du calendrier grégorien. Cela remplit time_low, time_mid et une partie de time_hi_and_version.
  2. Générez une séquence d’horloge aléatoire de 14 bits, utilisée pour éviter les doublons si l’horloge du système est reculée.
  3. Générez une valeur de nœud aléatoire de 48 bits, puis mettez à 1 le bit de multidiffusion (le bit de poids faible de son premier octet). La séquence d’horloge et le nœud proviennent du même tirage Web Crypto que pour la version 4, avec le même repli sur Math.random.
  4. Fixez les bits de version à 0001 et les bits de variante à 10.

Toutes versions d’UUID confondues, l’espace complet de 128 bits contient 2^128, soit environ 3,4 × 10^38, valeurs possibles.

Exemple détaillé

Reprenons l’exemple d’UUID donné plus haut : 550e8400-e29b-41d4-a716-446655440000.

  • Troisième groupe, 41d4 : le premier chiffre est 4, ce qui indique un UUID de version 4.
  • Quatrième groupe, a716 : le premier chiffre, a (en binaire 1010), commence par 10, les bits de variante requis.
  • Les chiffres hexadécimaux restants forment la charge aléatoire.

Un programme qui lit cet UUID vérifie le 4 et le motif 10 pour confirmer le format, puis traite le reste comme une valeur opaque.

Usages courants des UUID

  • Clés primaires dans les bases de données, surtout lorsque plusieurs serveurs créent des enregistrements en même temps sans se consulter.
  • Identifiants de fichiers, d’événements et de ressources dans des systèmes distribués tels que les microservices.
  • Identifiants d’appareils dans de grands réseaux, où chaque appareil peut générer son propre identifiant hors ligne.

Les UUID ne doivent pas servir de mots de passe, de secrets de session ni de clés d’API. La norme précise que les implémentations ne doivent pas utiliser les UUID comme capacités de sécurité, c’est-à-dire comme un identifiant qui donne accès par le seul fait d’être connu.

Le principal inconvénient est la taille : un UUID occupe 16 octets de stockage, contre 4 ou 8 octets pour un simple compteur entier. Les UUID aléatoires, comme ceux de version 4, ont aussi une mauvaise localité dans les index de base de données : les nouvelles valeurs se placent à des endroits aléatoires de l’index, ce qui peut ralentir les insertions.

Solutions de rechange aux UUID

Les entiers à incrémentation automatique sont plus petits et plus simples, mais ils conviennent mal dès que plus d’un serveur doit attribuer des identifiants de façon indépendante. Plusieurs schémas d’identifiants ordonnés dans le temps ont été conçus pour résoudre le problème du tri, et la RFC 9562 les cite comme contexte, notamment le Snowflake de Twitter et l’ULID. Un ULID fait 128 bits, comme un UUID, et est triable dans l’ordre lexicographique, c’est-à-dire qu’il se trie dans l’ordre de création lorsqu’on le traite comme du texte. Pour les nouveaux systèmes, l’UUID de version 7 offre le même avantage au sein de la norme UUID.

Historique de la norme UUID

Les UUID ont d’abord été utilisés dans l’Apollo Network Computing System, puis dans le Distributed Computing Environment de l’Open Software Foundation, puis dans Microsoft Windows. L’Internet Engineering Task Force a publié la RFC 4122 en juillet 2005 et l’a remplacée par la RFC 9562 en mai 2024.

Foire aux questions

À quoi sert un générateur d’UUID ? Il crée des identifiants uniques pour les bases de données, les systèmes distribués et les appareils, de sorte que deux enregistrements n’aient jamais à partager le même identifiant.

Quelle est la différence entre les UUID v1 et v4 ? La version 1 encode un horodatage. La version 4 est aléatoire, hormis ses bits de version et de variante, et ne contient aucun horodatage. Les UUID de version 1 produits par cet outil utilisent une valeur de nœud aléatoire plutôt qu’une véritable adresse MAC ; ils n’exposent donc aucune information permettant d’identifier la machine.

La version 1 expose-t-elle mon adresse MAC ? Pas avec cet outil. La norme d’origine permettait que le champ de nœud d’un UUID de version 1 contienne une véritable adresse MAC, mais ce générateur remplit toujours ce champ avec des bits aléatoires, en activant le bit de multidiffusion pour l’indiquer comme aléatoire.

Les UUID sont-ils garantis uniques ? Aucun schéma d’identifiants ne peut garantir une unicité absolue, mais un UUID de version 4 dispose d’environ 5,3 × 10^36 valeurs aléatoires possibles. La probabilité d’un doublon est assez faible pour être ignorée dans presque tous les usages pratiques, à condition que les nombres aléatoires soient de bonne qualité.

Peut-on utiliser un UUID comme clé primaire d’une base de données ? Oui. Les UUID fonctionnent bien comme clés primaires dans les systèmes distribués, car n’importe quel nœud peut en générer un sans consulter un serveur central. Le coût est de 16 octets de stockage par clé et, pour les versions aléatoires, des insertions plus lentes sur de très grandes tables.

Un UUID est-il la même chose qu’un GUID ? Oui. La RFC 9562 indique que les UUID sont aussi appelés GUID (Globally Unique IDentifiers), nom employé sur les plateformes Microsoft.

Les UUID de version 1 ou de version 4 peuvent-ils être triés par date de création ? Pas comme du texte. La version 4 est aléatoire, et la version 1 place en premier la partie de son horodatage qui change le plus vite. Pour des identifiants qui se trient dans l’ordre de création, utilisez l’UUID de version 7 ou un ULID.

Références

  1. Internet Engineering Task Force. RFC 9562: Universally Unique IDentifiers (UUIDs). RFC 9562 — rend obsolète la RFC 4122 (mai 2024) ; 122 bits aléatoires dans la version 4 ; versions 6 et 7 et recommandation de préférer la version 7 ; les adresses MAC ne devraient pas être utilisées ; les UUID ne doivent pas servir de capacités de sécurité ; mauvaise localité d’index de la version 4 ; historique d’Apollo NCS, d’OSF DCE et de Microsoft ; GUID comme autre nom.
  2. Internet Engineering Task Force. RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122 — publiée en juillet 2005 ; l’horodatage de la version 1 compte des intervalles de 100 nanosecondes depuis le 15 octobre 1582.
  3. ULID project. Universally Unique Lexicographically Sortable Identifier. Spécification ULID — compatibilité de 128 bits avec les UUID et tri lexicographique.