Pourquoi avez-vous besoin d'un GUID/UUID et pourquoi c'est plus simple qu'il n'y paraît ?
\n\nAvez-vous déjà réfléchi à la façon dont les sites et applications distinguent un enregistrement de base de données d'un autre ? Ou comment votre navigateur se souvient que c'est vous qui avez mis un article dans le panier, et non votre voisin ? Le secret réside souvent dans une petite chaîne puissante — le GUID (Globally Unique Identifier) ou son frère plus précis UUID (Universally Unique Identifier).
\n\nSur Stack Overflow, la question « How do I create a GUID / UUID ? » recueille des milliers de vues. Ce n'est pas un hasard. Chaque développeur rencontre tôt ou tard ce défi : « J'ai besoin d'un ID unique, mais je ne veux pas importer toute une bibliothèque ». Aujourd'hui, nous allons analyser ce sujet en JavaScript de A à Z. Vous apprendrez non seulement à générer un UUID, mais aussi à choisir la méthode adaptée à votre tâche.
\n\nPrêt ? C'est parti !
\n\nQu'est-ce qu'un UUID en réalité ? (et pourquoi ce n'est pas de la magie)
\n\nAvant d'écrire du code, commençons par la théorie. Un UUID est un nombre de 128 bits, généralement écrit en format hexadécimal avec des tirets. Il ressemble à ceci :
\n\n123e4567-e89b-12d3-a456-426614174000\n\nLa norme RFC 4122 décrit plusieurs versions d'UUID. Les plus populaires sont :
\n- \n
- Version 4 : UUID aléatoire. Presque tout ce que vous trouverez sur Internet est de ce type. \n
- Version 1 : Basé sur l'heure et l'adresse MAC. Obsolète, mais parfois rencontré. \n
- Version 5 : Généré à partir d'un nom (par exemple, une URL) à l'aide du hachage SHA-1. \n
La propriété principale d'un UUID est l'unicité sans serveur central. La probabilité de collision (deux ID identiques) est si faible qu'on peut la négliger. On dit que si l'on générait un milliard d'UUID par seconde, il faudrait environ 100 ans pour créer un doublon. Une bonne garantie, n'est-ce pas ?
\n\nLa méthode la plus correcte : crypto.randomUUID()
\n\nSi vous écrivez du JavaScript moderne (ES2020+), vous disposez d'une solution intégrée — crypto.randomUUID(). Cette méthode est disponible dans les navigateurs et Node.js (à partir de la version 14.17.0).
\n\nVoici comment cela fonctionne :
\n\n// Navigateur\nconst myUUID = crypto.randomUUID();\nconsole.log(myUUID); // Affiche : "f47ac10b-58cc-4372-a567-0e02b2c3d479"\n\n// Node.js (versions récentes)\nconst { randomUUID } = require('crypto');\nconst myUUID = randomUUID();\nconsole.log(myUUID);\n\nPourquoi est-ce le meilleur choix ?
\n- \n
- Sécurité : Utilise un générateur de nombres aléatoires cryptographiquement sûr. Aucun motif prévisible. \n
- Norme : Conforme strictement à la RFC 4122 version 4. \n
- Performance : Écrit en C++ en interne, fonctionne à une vitesse fulgurante. \n
- Zéro dépendance : Pas besoin d'installer de bibliothèques tierces. \n
Important : Dans les anciens navigateurs (Internet Explorer, Safari avant 15.4), cette méthode peut être absente. Si vous supportez ces « dinosaures », lisez la suite — nous avons des alternatives.
\n\nLe hack classique : Math.random() + modèle RFC 4122
\n\nAvant l'apparition de crypto.randomUUID(), les développeurs réinventaient la roue. L'option la plus populaire était d'utiliser Math.random() pour insérer des chiffres dans le modèle UUID. Ce code circule sur Internet depuis plus de 10 ans :
\n\nfunction generateUUID() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n const r = Math.random() * 16 | 0;\n const v = c === 'x' ? r : (r & 0x3 | 0x8);\n return v.toString(16);\n });\n}\n\nconsole.log(generateUUID()); // Affiche : "9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d"\n\nComment cela fonctionne-t-il ?
\n- \n
- Le modèle
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxxdéfinit le format. \n - Le caractère 'x'