Aller au contenu

Générer des UUID

Confidentiel — votre fichier n'est jamais conservé

Quelle version ?

Format
Votre UUID

Le résultat (Votre UUID) s'affiche ici.

Comment ça marche

1

Choisissez une version

v4 pour tout ce qui doit être impossible à deviner. v7 pour les clés de base de données. La différence est expliquée sur la page plutôt que supposée connue.

2

Choisissez la quantité

Un seul, ou jusqu'à dix mille d'un coup, avec une mise en forme au choix — majuscules, accolades, sans tirets, ou en liste entre guillemets prête pour le code.

3

Copiez-les

Copiez tout, ou téléchargez-les sous forme de fichier texte.

Version 4 ou version 7, et pourquoi c'est important en base de données

Un UUID, ce sont 128 bits écrits sous forme de 32 chiffres hexadécimaux, dans le groupement familier 8-4-4-4-12. Six de ces bits servent à indiquer la version et la variante, ce qui laisse 122 bits aléatoires dans une version 4 — assez pour en générer un milliard par seconde pendant un siècle avec une probabilité infime de voir deux fois le même. Tout l'intérêt est là : deux systèmes qui n'ont jamais communiqué peuvent chacun créer des identifiants en étant sûrs qu'ils n'entreront jamais en collision.

Pour que cela tienne, l'aléatoire doit être réel, et ici il provient de la source aléatoire cryptographique plutôt que d'un générateur de nombres aléatoires ordinaire. La différence compte quand les identifiants servent de jetons d'accès — un lien de réinitialisation de mot de passe, une URL de partage impossible à deviner — car un générateur prévisible permet à quelqu'un de déduire la valeur suivante à partir des précédentes. Avec une source cryptographique, il n'y a rien à prédire.

La version 7 existe parce que la version 4 se comporte mal comme clé primaire de base de données. Elle place un horodatage de 48 bits à la milliseconde en tête et remplit le reste d'aléatoire, si bien que des UUID générés à la suite se trient dans leur ordre de création. Cela paraît cosmétique, et ne l'est pas : une clé aléatoire disperse chaque insertion dans tout l'index, chaque écriture touche donc une page différente et le cache ne sert plus à rien, alors qu'une clé ordonnée dans le temps s'ajoute à une extrémité. Sur une grande table, l'écart de débit d'insertion est considérable, et c'est la raison pour laquelle la v7 a été normalisée.

Le compromis est réel et mérite réflexion. Un UUID version 7 indique à quiconque le voit sa date approximative de création, à la milliseconde près, et une série d'entre eux révèle à quel rythme vous créez des enregistrements. Pour une clé interne, aucun problème. Pour un identifiant exposé dans une URL — un numéro de commande, un lien vers un document, un identifiant d'utilisateur — c'est une petite fuite d'information que la version 4 n'a pas. Si les deux comptent, utilisez la v7 pour la clé primaire et la v4 pour tout ce qui est public.

Si vous cherchez autre chose

Générez-les là où ils sont utilisés. Chaque base de données et chaque langage le propose nativement — gen_random_uuid() dans PostgreSQL, UUID() dans MySQL, crypto.randomUUID() en JavaScript, uuid.uuid4() en Python — et générer un lot dans un navigateur pour le coller dans du code convient pour des données de test, mais pas pour quoi que ce soit qui s'exécute réellement.

Si la v7 vous intéresse pour avoir des clés triables, il existe des alternatives à connaître. ULID encode la même idée en 26 caractères, plus courts et insensibles à la casse ; les identifiants Snowflake tiennent sur 64 bits, ce qui divise par deux la taille de l'index par rapport aux 128 bits d'un UUID. Et dans bien des bases de données, un simple entier auto-incrémenté reste plus rapide et plus compact que tous ceux-là — les UUID valent leur coût quand les identifiants doivent être créés à plusieurs endroits à la fois, et pas autrement.

Questions fréquentes

v4 ou v7 — lequel me faut-il ?

Pour une clé primaire de base de données, la v7. S'il doit être impossible à deviner — un lien de réinitialisation de mot de passe, un code d'invitation, un identifiant de session — la v4. C'est tout le choix, et la plupart des gens ignorent même qu'il existe, car presque tous les générateurs ne proposent que la v4.

Pourquoi la v4 est-elle une mauvaise clé de base de données ?

Parce qu'elle est entièrement aléatoire, alors qu'un index de base de données est trié. Les nouvelles clés aléatoires atterrissent n'importe où dans l'index : chaque insertion touche une page différente, le cache ne sert plus à rien, et l'index se fragmente et grossit. Sur une grande table très sollicitée, c'est un ralentissement mesurable qui s'aggrave avec le temps. Ce n'est pas un souci théorique — c'est la raison pour laquelle les documentations de Postgres et de MySQL en parlent désormais toutes les deux.

Qu'est-ce que l'UUID v7 ?

Un UUID dont les 48 premiers bits sont un horodatage à la milliseconde, suivis d'aléatoire. Il reste unique au niveau mondial et fait toujours 128 bits, mais comme la date vient en premier, les UUID v7 se trient dans leur ordre de création. Les nouvelles clés s'ajoutent à la fin de l'index au lieu de s'y disperser, exactement comme un entier auto-incrémenté — avec l'unicité d'un UUID. Il a été normalisé par la RFC 9562 en 2024, et c'est la recommandation actuelle pour les nouvelles tables.

Les UUID v7 générés ici se trient-ils vraiment ?

Oui, y compris au sein d'une même milliseconde, ce que la plupart des implémentations ratent. Un horodatage n'a qu'une résolution à la milliseconde : générer mille identifiants dans une boucle se termine en une seule — et avec des bits de poids faible purement aléatoires, ces mille-là ne se trient PAS dans leur ordre de création. Ce générateur utilise le compteur monotone décrit dans la RFC 9562 : un lot est donc strictement croissant, à chaque fois. Générez-en mille et triez-les : ils reviennent dans l'ordre où ils ont été créés.

Un UUID v7 peut-il être exposé publiquement sans risque ?

Oui, en gardant une chose à l'esprit : par conception, il révèle sa date de création, à la milliseconde près. Pour une clé de base de données, c'est généralement sans conséquence, voire utile. Mais si la date de création est elle-même sensible, ou si l'identifiant doit être impossible à deviner, utilisez la v4 — la v7 compte tout de même 74 bits aléatoires, ce qui est beaucoup, mais son horodatage est lisible en clair par quiconque possède l'identifiant.

Sont-ils assez aléatoires pour être sûrs ?

Oui. L'aléatoire provient de `crypto.getRandomValues`, le générateur cryptographiquement sûr du navigateur, jamais de `Math.random`. Cette distinction a causé de vraies vulnérabilités : `Math.random` est rapide mais prévisible, et des jetons de session construits dessus ont été devinés en pratique. Un UUID v4 compte 122 bits aléatoires, ce qui suffit pour que les collisions ne soient pas un souci en pratique.

Sont-ils générés sur mon appareil ?

Oui, entièrement, et pour des identifiants, cela compte. Un UUID récupéré sur le serveur de quelqu'un d'autre est un UUID que quelqu'un d'autre a vu — ce qui va à l'encontre du but si vous générez un secret. Ceux-ci ne quittent jamais votre navigateur. Une fois la page chargée, coupez votre Wi-Fi : elle fonctionne exactement de la même façon. C'est le moyen le plus simple de vérifier vous-même la promesse de confidentialité, plutôt que de nous croire sur parole.

Qu'est-ce que l'UUID nil ?

Que des zéros : 00000000-0000-0000-0000-000000000000. C'est un UUID valide et réservé, utilisé pour signifier « aucun » ou « non défini » là où un null n'est pas possible. Son opposé, l'UUID max composé uniquement de f, sert parfois de sentinelle de tri. Les deux sont proposés ici, car on en a parfois besoin et ils sont pénibles à taper correctement.

Bon à savoir : Les UUID version 4 proviennent de la source aléatoire cryptographique du navigateur, et non de Math.random : ils peuvent donc servir d'identifiants en toute sécurité. La version 7 intègre un horodatage à la milliseconde, ce qui lui permet de bien se trier — mais révèle aussi approximativement sa date de création. N'utilisez pas la v7 quand cela compte.

Intégrez cet outil à votre site

Gratuit pour tout blog, page de cours ou article d'aide. Collez un seul extrait de code et vos visiteurs pourront l'utiliser directement sur votre page.