Générer un UUID en JavaScript
Apprenez à générer, formater, analyser et valider des UUID RFC 4122/9562 en JavaScript avec Web Crypto natif et npm.
Les identifiants uniques universels (UUID) sont des identifiants de 128 bits conçus pour garantir un niveau d'unicité exceptionnel sans coordination centralisée. Dans les environnements JavaScript modernes (navigateurs, Node.js, Deno, Bun et Cloudflare Workers), la création et la manipulation d'UUID sont directes et performantes.
Démarrage rapide#
Dans les environnements modernes, l'API globale crypto permet de générer des UUID v4 natifs sans aucune dépendance :
La méthode crypto.randomUUID() s'appuie sur le générateur de nombres pseudo-aléatoires cryptographiquement sécurisé (CSPRNG) du système d'exploitation sous-jacent, conforme aux RFC 4122 et RFC 9562.
Générer des UUID avec le paquet uuid#
Pour les projets nécessitant des identifiants ordonnés dans le temps (UUID v7) ou un hachage d'espace de noms (UUID v5), le paquet standard uuid est la référence :
Analyser un UUID en octets binaires#
Un UUID canonique fait 36 caractères avec 4 tirets. Lors du stockage compact dans des bases de données ou des protocoles binaires, vous pouvez le convertir en un tableau Uint8Array de 16 octets :
Valider un UUID#
Valider les identifiants entrants permet de vérifier leur conformité syntaxique et d'éviter les enregistrements corrompus en base. Attention : la validation seule ne protège pas contre les injections SQL ; associez-la impérativement à des requêtes paramétrées :
UUID v4 vs UUID v7 en JavaScript#
- UUID v4 : Entièrement aléatoire. Idéal pour les jetons de session, les cookies ou les références publiques non indexées.
- UUID v7 : Ordonné temporellement. Intègre un horodatage milliseconde dans les 48 premiers bits, évitant la fragmentation des index B-tree. La monotonie stricte lors d'appels multiples dans la même milliseconde requiert un compteur ou mécanisme d'incrémentation défini (RFC 9562, section 6.2).
Bonnes pratiques#
- Privilégiez
crypto.randomUUID(): Évite d'alourdir le bundle applicatif lorsque seul le v4 standard est requis. - N'utilisez jamais
Math.random(): Trop prévisible et non conforme aux exigences cryptographiques. - Sensibilité à la casse : Le texte d'un UUID est insensible à la casse. La RFC 9562 autorise les majuscules, minuscules ou une combinaison des deux en entrée, bien que les minuscules soient privilégiées en sortie.