Whiz Tools

Générateur de UUID

UUID généré

Structure de UUID
Temps bas

Générateur de UUID

Introduction

Un identifiant unique universel (UUID) est un nombre de 128 bits utilisé pour identifier des informations dans les systèmes informatiques. Les UUID sont standardisés par l'Open Software Foundation (OSF) dans le cadre de l'environnement de calcul distribué (DCE). Ces identifiants sont conçus pour être uniques à la fois dans l'espace et dans le temps, ce qui les rend idéaux pour diverses applications dans les systèmes distribués et au-delà.

Cet outil de génération de UUID vous permet de créer à la fois des UUID de version 1 (basés sur le temps) et de version 4 (aléatoires). Ces identifiants sont utiles dans divers scénarios où une identification unique est requise, tels que les clés de base de données, les systèmes distribués et les protocoles réseau.

Comment fonctionnent les UUID

Structure des UUID

Un UUID est généralement représenté par 32 chiffres hexadécimaux, affichés en cinq groupes séparés par des tirets, sous la forme 8-4-4-4-12 pour un total de 36 caractères (32 caractères alphanumériques et 4 tirets). Par exemple :

550e8400-e29b-41d4-a716-446655440000

Les 128 bits d'un UUID sont divisés en champs spécifiques, chacun portant différentes informations selon la version du UUID :

  • 32 bits pour le champ time_low
  • 16 bits pour le champ time_mid
  • 16 bits pour le champ time_hi_and_version
  • 8 bits pour le champ clock_seq_hi_and_reserved
  • 8 bits pour le champ clock_seq_low
  • 48 bits pour le champ node

Voici un diagramme illustrant la structure du UUID :

A B C D E F A : time_low (32 bits) B : time_mid (16 bits) C : time_hi_and_version (16 bits) D : clock_seq_hi_and_reserved (8 bits) E : clock_seq_low (8 bits) F : node (48 bits)

Versions de UUID

Il existe plusieurs versions de UUID, chacune ayant sa propre méthode de génération :

  1. Version 1 (basée sur le temps) : Utilise l'horodatage actuel et l'adresse MAC de l'ordinateur.
  2. Version 2 (Sécurité DCE) : Semblable à la version 1, mais inclut un identifiant de domaine local.
  3. Version 3 (basée sur un nom, MD5) : Généré en hachant un identifiant de namespace et un nom.
  4. Version 4 (aléatoire) : Généré à l'aide d'un générateur de nombres aléatoires ou pseudo-aléatoires.
  5. Version 5 (basée sur un nom, SHA-1) : Semblable à la version 3, mais utilise le hachage SHA-1.

Cet outil se concentre sur la génération de UUID de version 1 et de version 4.

Formule

Génération de UUID de version 1

Les UUID de version 1 sont générés à l'aide des composants suivants :

  1. Horodatage : Une valeur de 60 bits représentant le nombre d'intervalles de 100 nanosecondes depuis le 15 octobre 1582 (date de la réforme grégorienne du calendrier chrétien).
  2. Séquence d'horloge : Une valeur de 14 bits utilisée pour éviter les doublons en cas de réglage de l'horloge vers l'arrière.
  3. Node : Une valeur de 48 bits, généralement dérivée de l'adresse MAC de l'ordinateur.

La formule pour générer un UUID de version 1 peut être exprimée comme suit :

UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node

Génération de UUID de version 4

Les UUID de version 4 sont générés à l'aide d'un générateur de nombres aléatoires cryptographiquement sécurisé. La formule est simplement :

UUID = random_128_bit_number

Avec des bits spécifiques définis pour indiquer la version (4) et la variante.

Cas d'utilisation

Les UUID ont de nombreuses applications dans divers domaines de l'informatique et de l'ingénierie logicielle :

  1. Clés de base de données : Les UUID sont souvent utilisés comme clés primaires dans les bases de données, en particulier dans les systèmes distribués où plusieurs nœuds peuvent générer des enregistrements simultanément.

  2. Systèmes distribués : Dans les grands systèmes distribués, les UUID aident à identifier de manière unique les ressources, les transactions ou les événements à travers plusieurs nœuds ou centres de données.

  3. Adressage de contenu : Les UUID peuvent être utilisés pour créer des identifiants uniques pour le contenu dans des systèmes de stockage adressables par contenu.

  4. Gestion des sessions : Les applications Web utilisent souvent des UUID pour gérer les sessions utilisateur, garantissant que chaque session a un identifiant unique.

  5. Identification des dispositifs IoT : Dans les applications Internet des objets (IoT), les UUID peuvent être utilisés pour identifier de manière unique les dispositifs individuels dans un réseau.

Alternatives

Bien que les UUID soient largement utilisés, il existe des approches alternatives pour générer des identifiants uniques :

  1. IDs auto-incrémentés : Simples et couramment utilisés dans les systèmes de base de données uniques, mais pas adaptés aux environnements distribués.

  2. IDs basés sur l'horodatage : Peuvent être utiles pour des données ordonnées par le temps mais peuvent rencontrer des problèmes de collision dans des scénarios à forte concurrence.

  3. IDs Snowflake : Développés par Twitter, ces IDs combinent horodatage et numéro de travail pour générer des IDs uniques dans des systèmes distribués.

  4. ULID (Identifiant universel unique lexicographiquement triable) : Une alternative plus récente qui vise à être plus conviviale et triable que les UUID.

Histoire

Le concept de UUID a été introduit pour la première fois dans le système de calcul en réseau Apollo et a ensuite été standardisé par l'Open Software Foundation (OSF) dans le cadre de l'environnement de calcul distribué (DCE) dans les années 1990. La spécification initiale a été publiée en 1997 sous la forme de l'ISO/IEC 11578:1996 et a été révisée en 2005 dans le cadre de l'ISO/IEC 9834-8:2005.

Les jalons clés de l'histoire des UUID :

  • Années 1980 : Apollo Computer développe le concept de UUID pour leur système de calcul en réseau.
  • 1997 : Première spécification UUID publiée sous la forme de l'ISO/IEC 11578:1996.
  • 2005 : Spécification UUID révisée et publiée dans le cadre de l'ISO/IEC 9834-8:2005.
  • 2009 : La RFC 4122 définit le format UUID et les algorithmes de génération utilisés aujourd'hui.

Au fil du temps, les UUID sont devenus un outil essentiel dans les systèmes distribués et la conception de bases de données, avec diverses implémentations et adaptations à travers différents langages de programmation et plateformes.

Exemples de code

Voici des exemples de génération de UUID dans divers langages de programmation :

import uuid

## Générer un UUID de version 4 (aléatoire)
random_uuid = uuid.uuid4()
print(f"UUID de version 4 : {random_uuid}")

## Générer un UUID de version 1 (basé sur le temps)
time_based_uuid = uuid.uuid1()
print(f"UUID de version 1 : {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Générer un UUID de version 4 (aléatoire)
const randomUuid = uuidv4();
console.log(`UUID de version 4 : ${randomUuid}`);

// Générer un UUID de version 1 (basé sur le temps)
const timeBasedUuid = uuidv1();
console.log(`UUID de version 1 : ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Générer un UUID de version 4 (aléatoire)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID de version 4 : " + randomUuid);

        // Générer un UUID de version 1 (basé sur le temps)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID de version 1 : " + timeBasedUuid);
    }
}
require 'securerandom'

## Générer un UUID de version 4 (aléatoire)
random_uuid = SecureRandom.uuid
puts "UUID de version 4 : #{random_uuid}"

## Ruby n'a pas de méthode intégrée pour les UUID de version 1
## Vous devrez utiliser une gem comme 'uuidtools' pour cela
<?php
// Générer un UUID de version 4 (aléatoire)
$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "UUID de version 4 : " . $randomUuid . "\n";

// PHP n'a pas de méthode intégrée pour les UUID de version 1
// Vous devrez utiliser une bibliothèque comme 'ramsey/uuid' pour cela
?>

Références

  1. Leach, P., Mealling, M., & Salz, R. (2005). Un identifiant unique universel (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Organisation internationale de normalisation. (2005). Technologies de l'information – Interconnexion des systèmes ouverts – Procédures pour le fonctionnement des autorités d'enregistrement OSI : Génération et enregistrement d'identifiants uniques universels (UUID) et leur utilisation comme composants d'identificateur d'objet ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Identifiant unique universel. (2023). Dans Wikipédia. https://fr.wikipedia.org/wiki/Identifiant_unique_universel
  4. ID Snowflake. (2023). Dans Wikipédia. https://fr.wikipedia.org/wiki/Snowflake_ID
  5. Spécification ULID. (n.d.). GitHub. https://github.com/ulid/spec
Feedback