Back

Guide Pratique pour Générer des UUID en JavaScript

Guide Pratique pour Générer des UUID en JavaScript

Besoin d’un identifiant unique pour votre application JavaScript ? Que vous développiez une application pilotée par base de données, gériez des sessions utilisateur ou traciez des requêtes distribuées, la génération d’UUID est une compétence fondamentale que tout développeur doit maîtriser.

Ce guide couvre les approches modernes de génération d’UUID en JavaScript, de la méthode native crypto.randomUUID() au package npm uuid polyvalent. Vous apprendrez quelle méthode correspond à votre cas d’usage spécifique — qu’il s’agisse d’une application web de pointe, d’un service Node.js ou d’un système legacy nécessitant une large compatibilité.

Points Clés à Retenir

  • Utilisez crypto.randomUUID() pour les environnements modernes (Node.js 14.17+ et navigateurs récents)
  • Implémentez crypto.getRandomValues() pour la compatibilité avec les navigateurs legacy tout en conservant la sécurité cryptographique
  • Choisissez le package npm uuid lorsque vous avez besoin de versions UUID spécifiques ou d’une compatibilité maximale
  • N’utilisez jamais Math.random() pour des UUID en production en raison de l’absence de sécurité cryptographique

Qu’est-ce qu’un UUID et Pourquoi l’Utiliser ?

Un UUID (Universally Unique Identifier, ou Identifiant Unique Universel) est un identifiant de 128 bits formaté en 36 caractères : 550e8400-e29b-41d4-a716-446655440000. Également connus sous le nom de GUID, ces identifiants sont pratiquement garantis d’être uniques sans nécessiter d’autorité centrale ou de coordination de base de données.

Pour les développeurs frontend et Node.js, les UUID résolvent des problèmes critiques :

  • Enregistrements de base de données : Générer des clés primaires sans conflits d’auto-incrémentation
  • Jetons de session : Créer des identifiants de session uniques et imprévisibles
  • Nommage de fichiers : Éviter les collisions de noms dans le contenu téléversé
  • Traçage de requêtes : Suivre les opérations à travers les microservices

Méthode Moderne : crypto.randomUUID()

La méthode crypto.randomUUID() est le standard actuel pour générer des valeurs d’ID uniques dans les environnements modernes. Elle est intégrée aux navigateurs et à Node.js (14.17+), ne nécessite aucune dépendance et produit des valeurs UUID v4 cryptographiquement sécurisées.

Implémentation Navigateur

const uuid = crypto.randomUUID();
console.log(uuid); // "3b99e3e0-7598-4bf8-b9c1-e915af91713c"

Implémentation Node.js

import { randomUUID } from 'crypto';

const uuid = randomUUID();
console.log(uuid); // "b7e44f0a-811f-4c1c-b7f0-48d51f5dbc1f"

Support Navigateurs : Chrome 92+, Firefox 95+, Safari 15.4+, Edge 92+
Support Node.js : Version 14.17.0+

Utilisez crypto.randomUUID() lorsque vous avez besoin d’UUID aléatoires sécurisés dans des applications modernes sans dépendances externes.

Méthode de Repli : crypto.getRandomValues()

Pour les environnements qui ne supportent pas crypto.randomUUID(), vous pouvez implémenter la génération d’UUID v4 en utilisant crypto.getRandomValues(). Cette méthode fonctionne dans les navigateurs aussi anciens que Chrome 11 et les versions de Node.js disposant du module crypto.

function generateUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    const r = crypto.getRandomValues(new Uint8Array(1))[0];
    const v = c === 'x' ? (r & 0x0f) : ((r & 0x03) | 0x08);
    return v.toString(16);
  });
}

const uuid = generateUUID();
console.log(uuid); // "42254574-affd-47cc-9915-0ecae592351b"

Cette approche maintient la sécurité cryptographique tout en supportant les environnements plus anciens.

Le Package npm uuid pour une Flexibilité Maximale

Le package npm uuid reste la solution la plus polyvalente pour la génération d’UUID en JavaScript, particulièrement lorsque vous avez besoin de versions UUID spécifiques ou d’une compatibilité maximale.

Installation

npm install uuid

Utilisation Basique (UUID v4)

import { v4 as uuidv4 } from 'uuid';

const uuid = uuidv4();
console.log(uuid); // "1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed"

Autres Versions d’UUID

import { v1, v3, v5 } from 'uuid';

// v1 : Basé sur l'horodatage (triable)
const uuid1 = v1(); 

// v3/v5 : Basé sur un nom (déterministe)
const uuid5 = v5('hello.example.com', v5.DNS);

Le package uuid supporte toutes les versions d’UUID (v1-v5), ce qui le rend idéal lorsque vous avez besoin de :

  • UUID basés sur l’horodatage pour des identifiants triables (v1)
  • UUID déterministes à partir de paires namespace/nom (v3, v5)
  • Rétrocompatibilité avec les anciennes versions de Node.js
  • React Native ou d’autres environnements non standards

Quand Éviter Math.random()

Bien que vous puissiez trouver des implémentations d’UUID utilisant Math.random(), celles-ci ne devraient être utilisées que pour les tests ou les contextes non sécurisés :

// ⚠️ NON SÉCURISÉ - Tests uniquement
function testUUID() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
    const r = Math.random() * 16 | 0;
    const v = c === 'x' ? r : (r & 0x3 | 0x8);
    return v.toString(16);
  });
}

Math.random() manque de sécurité cryptographique et ne devrait pas être utilisé pour des UUID en production.

Bonnes Pratiques et Validation

Validation d’UUID

Validez toujours les UUID provenant de sources externes :

function isValidUUID(uuid) {
  const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return uuidRegex.test(uuid);
}

console.log(isValidUUID('550e8400-e29b-41d4-a716-446655440000')); // true

Choisir la Bonne Méthode

  • Application web moderne ou Node.js 14.17+ : Utilisez crypto.randomUUID()
  • Support navigateur legacy nécessaire : Implémentez avec crypto.getRandomValues()
  • Versions UUID spécifiques (v1, v3, v5) : Utilisez le package npm uuid
  • Compatibilité maximale : Utilisez le package npm uuid
  • Tests rapides/prototypes uniquement : Implémentation Math.random()

Conclusion

La génération d’UUID en JavaScript n’a pas à être complexe. Pour la plupart des applications modernes, crypto.randomUUID() fournit une solution simple et sécurisée. Lorsque vous avez besoin d’une compatibilité plus large ou de versions UUID spécifiques, le package npm uuid vous couvre. Rappelez-vous simplement d’éviter Math.random() pour une utilisation en production et de valider tous les UUID provenant de sources externes.

Choisissez la méthode qui correspond à votre environnement et à vos exigences — votre futur vous (et votre équipe) vous remercieront pour les identifiants uniques propres et fiables dans toute votre base de code.

FAQ

UUID v4 utilise des nombres aléatoires ou pseudo-aléatoires, rendant chaque ID imprévisible. UUID v5 génère des ID déterministes à partir d'un namespace et d'un nom en utilisant le hachage SHA-1, de sorte que la même entrée produit toujours le même UUID.

Non, React Native ne supporte pas crypto.randomUUID() nativement. Utilisez plutôt le package npm uuid, qui fournit une implémentation compatible fonctionnant dans tous les environnements React Native.

Pour des ID plus courts, envisagez d'utiliser les packages nanoid ou shortid. Ils génèrent des chaînes uniques compatibles URL qui sont plus compactes que les UUID tout en maintenant une unicité suffisante pour la plupart des applications.

Oui, les valeurs UUID v4 sont cryptographiquement aléatoires et sûres à exposer. Cependant, évitez d'utiliser UUID v1 dans des contextes publics car il contient des informations d'horodatage et d'adresse MAC qui pourraient divulguer des détails système.

Complete picture for complete understanding

Capture every clue your frontend is leaving so you can instantly get to the root cause of any issue with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data.

Check our GitHub repo and join the thousands of developers in our community.

OpenReplay