Accueil
  • #développement
  • #UUID
  • #outils

UUID v4 ou v7 : lequel choisir et quand les utiliser

Par · · 4 min de lecture

Un UUID est un identifiant de 128 bits que l’on peut générer n’importe où, sans base de données ni serveur central, en étant quasiment sûr qu’il n’existera pas deux fois. C’est pratique, mais il y a plusieurs versions et le choix a des conséquences, surtout quand l’UUID devient une clé primaire. Voici ce que contient un UUID, quand préférer la version 4 ou la version 7, et pourquoi il ne faut jamais le traiter comme un secret.

Ce que contient un UUID#

Un UUID s’écrit en 32 chiffres hexadécimaux répartis en cinq groupes, au format 8-4-4-4-12 :

550e8400-e29b-41d4-a716-446655440000

Deux positions ont un sens fixe. Le premier caractère du troisième groupe donne la version (ici 4). Le premier caractère du quatrième groupe indique la variante : pour les UUID actuels, c’est 8, 9, a ou b. Le reste dépend de la version. Le format est défini par la RFC 9562, qui a remplacé la RFC 4122 en 2024.

UUID v4 : 122 bits aléatoires#

Dans un UUID v4, tout est tiré au hasard, sauf les 6 bits de version et de variante. Il reste donc 122 bits aléatoires, soit environ 5,3 × 10^36 valeurs possibles. Pour qu’une collision devienne aussi probable qu’un tirage à pile ou face, il faudrait en générer de l’ordre de 2,7 milliards de milliards. À un milliard par seconde, cela prendrait plus de 80 ans. En pratique, les collisions viennent plutôt d’une mauvaise source d’aléatoire que du hasard : l’outil ci-dessous s’appuie sur l’aléatoire cryptographique du navigateur.

UUID v7 : l’heure d’abord, le hasard ensuite#

Un UUID v7 commence par un horodatage Unix de 48 bits en millisecondes, suivi de la version, de bits aléatoires et de la variante :

019d4c3a-1b2e-7c4f-8a9d-5e6f7a8b9c0d

Les 12 premiers chiffres hexadécimaux (019d4c3a1b2e) valent 1 775 100 369 710 millisecondes, soit le 2 avril 2026 à 03:26:09 UTC. Deux UUID v7 créés à des moments différents se trient donc dans l’ordre de création, par simple tri alphabétique. Pour décoder un tel préfixe, convertissez-le en décimal puis collez le résultat dans un convertisseur de timestamp, en choisissant « Millisecondes ».

Quel UUID pour une clé primaire ?#

Une base de données range ses index dans un arbre trié (B-tree). Avec des UUID v4, chaque nouvelle ligne tombe à une position aléatoire de l’index : les pages se remplissent de façon inégale, se coupent et sortent du cache. Avec des UUID v7, les nouvelles clés s’ajoutent à la fin, comme avec un entier auto-incrémenté, tout en gardant l’avantage d’un identifiant généré hors de la base.

Quelques nuances :

  • L’effet réel dépend de votre base et de sa taille : mesurez avant de vous inquiéter sur une petite table.
  • Un entier auto-incrémenté occupe 4 ou 8 octets contre 16, et reste un bon choix tant que seule la base crée les identifiants.
  • Un UUID v7 révèle sa date de création. Si cette information doit rester privée, préférez la version 4.
  • Si votre base propose un type natif uuid, utilisez-le plutôt qu’une chaîne de 36 caractères.

Un UUID n’est pas un secret#

Un identifiant n’est pas un justificatif d’accès. Un UUID apparaît dans des URL, des logs, des adresses de partage ; s’il suffit de le connaître pour accéder à une ressource, la sécurité repose sur l’obscurité. Vérifiez toujours côté serveur que la personne a le droit d’accéder à la ressource. Pour un jeton de session ou de réinitialisation, utilisez un générateur dédié à cet usage, et un générateur de mots de passe pour les mots de passe. Un UUID n’est pas non plus une empreinte de contenu : pour cela, voir le générateur de hash.

Générer des UUID dans le navigateur#

Le générateur d’UUID produit des UUID v4 ou v7 :

  1. Choisissez la « Version » : « UUID v4 » ou « UUID v7 ».
  2. Réglez la « Quantité », de 1 à 100.
  3. Cochez si besoin un format : « Majuscules », « Sans tirets » ou « Entre accolades ».
  4. Cliquez sur « Générer », puis copiez un identifiant, « Copier tout », ou utilisez « Télécharger .txt ».

Pour la version 4, l’outil appelle crypto.randomUUID(). Pour la version 7, plusieurs UUID créés dans la même milliseconde utilisent un compteur croissant dans les bits réservés, de sorte qu’ils restent triés dans l’ordre de génération. Rien n’est envoyé à un serveur.

Outils utilisés dans cet article

À lire aussi