Générateur UUID
Générer des identifiants UUID v1, v3, v4, v5, v7
Un UUID (Universally Unique Identifier) est une valeur de 128 bits garantie unique dans l'espace et le temps. La version 4 (aléatoire) est la plus courante -- la probabilité de collision est astronomiquement faible.
Qu’est-ce qu’un UUID ?
Un UUID (Universally Unique Identifier) est un identifiant de 128 bits standardise par la RFC 4122. Les UUID sont concus pour etre globalement uniques sans necessiter d’autorite d’enregistrement centrale — n’importe quel systeme peut en generer un independamment avec un risque de duplication quasi nul.
Les UUID sont omnipresents en ingenierie logicielle. Ils servent de cles primaires dans les bases de donnees, d’identifiants de correlation dans les systemes distribues, de jetons de session dans les applications web et d’identifiants dans les API. Leur nature decentralisee les rend ideaux pour les systemes ou la coordination entre generateurs d’identifiants est impraticable ou impossible.
La representation textuelle canonique d’un UUID est de 36 caracteres : 32 chiffres hexadecimaux affiches en cinq groupes separes par des tirets, suivant le format 8-4-4-4-12.
Versions d’UUID
Tous les UUID ne sont pas crees de la meme maniere. Le numero de version (encode dans le 13e caractere) determine comment l’UUID est genere. Chaque version fait des compromis differents entre garanties d’unicite, triabilite et confidentialite.
Version 1 — Horodatage + Adresse MAC
L’UUID v1 combine un horodatage de 60 bits (intervalles de 100 nanosecondes depuis le 15 octobre 1582) avec l’adresse MAC de 48 bits de la machine generatrice et une sequence d’horloge de 14 bits. Cela garantit l’unicite entre machines et dans le temps, mais expose l’identite materielle du createur.
Version 3 — Hachage MD5 avec espace de noms
L’UUID v3 genere un UUID deterministe en hachant un UUID d’espace de noms et un nom avec MD5. Le meme espace de noms + nom produit toujours le meme UUID. Utile pour generer des identifiants reproductibles a partir d’entrees connues, mais MD5 est considere comme cryptographiquement faible.
Version 4 — Aléatoire
L’UUID v4 remplit 122 des 128 bits avec des donnees cryptographiquement aléatoires (6 bits sont reserves pour la version et la variante). C’est la version la plus utilisee en raison de sa simplicite et de ses solides garanties d’unicite. Aucune coordination, aucun horodatage, aucune adresse MAC — juste de l’aléatoire.
Version 5 — Hachage SHA-1 avec espace de noms
L’UUID v5 fonctionne comme la v3 mais utilise SHA-1 au lieu de MD5. Prefere a la v3 pour les nouvelles applications en raison de la meilleure resistance aux collisions de SHA-1 (bien que SHA-1 soit egalement obsolete pour un usage cryptographique, il reste adequat pour le hachage d’espaces de noms).
Version 7 — Aléatoire ordonne dans le temps (RFC 9562)
L’UUID v7 est le plus recent, defini dans la RFC 9562 (2024). Il integre un horodatage Unix en millisecondes dans les 48 bits les plus significatifs, suivi de donnees aléatoires. Le resultat est un UUID a la fois unique et triable chronologiquement — ideal pour les cles primaires de base de donnees ou la performance des index B-tree est importante.
Structure d’un UUID
Chaque UUID suit la meme disposition de 128 bits, mais l’interpretation de certains bits depend de la version :
Le nibble de version est le premier chiffre hexadecimal du troisieme groupe. Un 4 signifie UUID v4 (aléatoire), un 7 signifie UUID v7 (ordonne dans le temps), etc.
Les bits de variante occupent les bits les plus significatifs du quatrieme groupe. Pour les UUID RFC 4122, les bits de tete sont 10 en binaire, ce qui signifie que le premier chiffre hexadecimal de ce groupe est toujours 8, 9, a ou b.
Comparaison des versions
| Version | Source | Triable | Confidentialite | Ideal pour |
|---|---|---|---|---|
| v1 | Horodatage + MAC | Partiellement | Faible (MAC expose) | Systemes existants |
| v4 | Aléatoire | Non | Elevee | Usage general, API |
| v5 | SHA-1(namespace + nom) | Non | Elevee | Identifiants deterministes a partir d’entrees connues |
| v7 | Horodatage + Aléatoire | Oui | Elevee | Cles primaires BDD, journaux d’evenements |
Quand utiliser quelle version
UUID v4 est le choix sur par defaut. Il fonctionne partout, ne necessite aucune coordination et ne revele rien sur le systeme generateur. Utilisez-le pour les identifiants d’API, les jetons de session, les identifiants de correlation et partout ou l’unicite est la preoccupation principale.
UUID v7 est le meilleur choix pour les cles primaires de base de donnees. Les UUID aléatoires traditionnels (v4) causent de la fragmentation d’index B-tree car les nouvelles valeurs sont dispersees dans l’index. Les valeurs UUID v7 sont monotonement croissantes (car l’horodatage vient en premier), donc les nouvelles lignes sont toujours ajoutees a la fin de l’index — exactement comme les entiers auto-incrementes, mais sans sequence centralisee.
UUID v5 est ideal lorsque vous avez besoin d’identifiants deterministes et reproductibles. Avec le meme espace de noms et le meme nom, v5 produit toujours le meme UUID. C’est utile pour generer des identifiants stables a partir d’URL, de noms DNS ou d’autres entrees connues sans stocker de table de correspondance.
Cas d’utilisation courants
- Cles primaires de base de donnees : Les UUID eliminent le besoin de generateurs de sequences centralises, permettant aux systemes distribues de creer des enregistrements independamment sans conflits
- Identifiants de ressources API : Les UUID dans les URL (
/users/550e8400-e29b-41d4-a716-446655440000) sont non sequentiels, empechant les attaques par enumeration - Tracage distribue : Les identifiants de correlation (UUID) suivent les requetes a travers les microservices, apparaissant dans les logs de chaque service qui traite la requete
- Nommage de fichiers et d’actifs : Les UUID empechent les collisions de noms de fichiers lorsque plusieurs utilisateurs telechargent des fichiers simultanement
- Cles d’idempotence : Les API utilisent des UUID generes par le client pour garantir qu’une requete n’est traitee qu’une seule fois, meme en cas de reessai
Essayez ces exemples
Un UUID v4 standard au format canonique 8-4-4-4-12. Le '4' dans le troisieme groupe indique la version 4 (aléatoire). Les bits de tete du quatrieme groupe (a, 8, 9 ou b) indiquent la variante RFC 4122.
550e8400-e29b-41d4-a716-446655440000 L'UUID nul -- les 128 bits sont a zero. Utilise comme valeur sentinelle pour representer 'pas d'UUID' ou 'inconnu'. Defini dans la RFC 4122 comme un cas special.
00000000-0000-0000-0000-000000000000