8 versions d’UUID, et quand les utiliser
Photo par Alexander Sinn sur Unsplash

8 versions d’UUID, et quand les utiliser

Vous avez surement déjà entendu l'acronyme UUID, mais savez-vous vraiment ce que c'est et quand vous en servir ?

Dis Papa, c’est quoi un UUID ?

UUID veut dire Universally unique identifier dans la langue de Shakespeare. On pourra dire Identifiant unique universel si l’on veut rester franco-français 🤫

Un UUID est une chaine de caractère de cette forme

xxxxxxxx-xxxx-Yxxx-Zxxx-xxxxxxxxxxxx

Les 16 octets d'un UUID sont représentés comme 32 chiffres hexadécimaux en minuscules séparés par 4 tirets. Sa version est indiqué par le caractère X et sa variante par le caractère Z dans l’exemple ci-dessus.

On s’en sert pour avoir un identifiant unique, non prédictible (à la différence d’un id avec auto incrémentation d’une base de données par exemple)

  • 301f04a8-63b4-11ef-b864-0242ac120002 : UUID version 1
  • 05a56a7b-23bf-45d1-b13f-5e53a7cbbfa7  : UUID version 4
  • 01918f01-8379-713c-b579-60e94fb58b0f : UUID version 7

Quelles sont les différentes versions ?

Généralement, lorsque vous avez quelques chose qui est versionné, le numéro de version le plus élevé est le plus récent, et généralement le meilleur.

Et bien, vous savez quoi ? Pour les UUID, ce n’est pas (tout à fait) le cas 🤡

Il existe 8 versions d'UUID (de v1 à v8) qui sont différentes et toutes définies selon des normes.

  • L'UUID v1 est généré à partir d'un timestamp, d'un compteur monotone et d'une adresse MAC.
  • L'UUID v2 est réservé aux identifiants de sécurité est appelée DCE security UUID. Vous n’en avez jamais entendu parler ? Normal. C’est un format peu documenté et peu fiable basé sur l’adresse MAC, un timestamp, un ID d’utilisateur. Toutes les 7 minutes, il n’y a que 64 UUID différents disponibles (à cause du timestamp). Bref, vous pouvez l’oublier.
  • L'UUID v3 est généré à partir de hachages MD5 de certaines données que vous fournissez. Pour une même chaîne de données (par exemple une URL), vous obtiendrez toujours le même UUID.
  • L'UUID v4 est généré à partir de données entièrement aléatoires. C'est généralement ce à quoi la plupart des gens pensent lorsque l’on parle d’UUID.
  • L'UUID v5 est généré à partir de hachages SHA1 de certaines données que vous fournissez. Comme pour la version 3, le RFC suggère les DNS ou les URL comme candidats.
  • L'UUID v6 est généré à partir d'un timestamp, d'un compteur monotone et d'une adresse MAC. Il s'agit des mêmes données que pour la version 1, mais l'ordre est modifié de manière à ce que le tri soit effectué en fonction de l'heure de création.
  • L'UUID v7 est généré à partir d'un timestamp et de données aléatoires.
  • L'UUID v8 est entièrement personnalisé (outre les champs obligatoires version/variante que contiennent toutes les versions).

Quand les utiliser ?

Bon, vous avez 8 versions différentes à disposition, alors laquelle utiliser ?

Il existe quelques cas d'utilisation courants qui indiquent la version à utiliser.

Vous aurez généralement le choix entre deux d'entre elles : la v4 et la v7. Dans une moindre mesure, il pourra vous arriver de choisir la v5 ou la v8.

Utilisez la v4 lorsque vous souhaitez simplement un identifiant aléatoire. Valeur sure, qui comble une bonne partie des use cases.

Utilisez v7 si vous utilisez l'identifiant dans un contexte où vous souhaitez pouvoir le trier. Par exemple, envisagez d'utiliser v7 si vous utilisez des UUID comme clés de base de données.

UUID V7, la première partie est un timestamp donc facilement triable
UUID V7, la première partie est un timestamp donc facilement triable

Les options v5 ou v8 sont utilisées si vous souhaitez que l'UUID contienne vos propres données, mais en général, à moins de travailler pour une très grosse société ou que vous vouliez générer des UUID à votre sauce, peu de chance que vous vous en serviez un jour.

Ok et les autres, c’est pour la décoration ?

Selon le RFC, la v7 améliore la v1 et la v6 et devrait être utilisée à la place ces dernières dans la mesure du possible. Donc, en gros, à part pour du legacy, vous pouvez les oublier.

La v2 est réservée au cas défini dans la RFC. C'est un cas particulier, aucun problème pour l'effacer de votre mémoire.

La v3 est remplacée par la v5, qui utilise un hachage plus puissant et sans collision.

Voilà, vous en savez un peu plus sur les UUID à présent. 

Vous savez à présent pourquoi vous copier-collez le code suivant dans vos projets 😇 :

import { v4 as uuidv4 } from 'uuid';
Publié le :
26/08/2024
Dans la catégorie :
Auteur :
Mathieu LESNIAK
Mathieu LESNIAK
Commentaires :
omnireso
omnireso
Concernant les UUID pour la blockchain, aurais tu une reco ? Et sinon, j'ai l'impression que cela fait un moment qu'il n'y a pas eu de nouveaux billets sur ce blog ? Merci en tous cas (je lorgne côté Starlink)
29/08/2024 23:06:58
Mathieu
Mathieu
Honnêtement, la crypto n’est pas du tout mon domaine de prédilection donc je laisse la parole à d’autres.
Pour les billets, c’est tout simplement que les efforts sont mis ailleurs en ce moment mais j’ai bien l’intention de continuer à alimenter ce blog 😊
30/08/2024 11:16:36
Ajouter un commentaire
Les champs obligatoires sont marqués d'une *