Générateur d'UUID

Générez et validez des UUID (v1, v4, v5, v7), avec prise en charge du batch et de multiples options de formatage, ainsi que des exemples de code dans plusieurs langages.

Générateur d'UUID

Options de format

Validateur d'UUID

Instructions d'utilisation

Un UUID est un identifiant de 128 bits, représenté normalement sous forme de 36 caractères avec des tirets.
UUID v1 : basé sur un horodatage et des informations de carte réseau ; ordonné chronologiquement, mais peut révéler la date/la localisation.
UUID v4 : basé sur des nombres aléatoires ; le plus courant, offre une bonne unicité et confidentialité.
UUID v7 : basé sur le temps Unix en millisecondes + un nombre aléatoire ; naturellement triable, tout en évitant les problèmes de confidentialité de v1.
UUID v5 : basé sur un espace de noms UUID et un nom, calculé via SHA-1 ; même entrée = même résultat déterministe.
Format standard : xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36 caractères).

Fonctionnalités

  • Prise en charge des versions v1, v4, v5 et v7
  • Génération en lot avec nombre personnalisable
  • Formatage flexible : majuscules, suppression des tirets, ajout d'accolades
  • Validateur intégré et détection automatique de version
  • Support complet de l'internationalisation et des thèmes multiples

Qu'est-ce qu'un UUID ?

Un UUID est un identifiant de 128 bits, représenté normalement sous forme de 36 caractères avec des tirets.

UUID v1 : basé sur un horodatage et des informations de carte réseau ; ordonné chronologiquement, mais peut révéler la date/la localisation.

UUID v4 : basé sur des nombres aléatoires ; le plus courant, offre une bonne unicité et confidentialité.

UUID v7 : basé sur le temps Unix en millisecondes + un nombre aléatoire ; naturellement triable, tout en évitant les problèmes de confidentialité de v1.

UUID v5 : basé sur un espace de noms UUID et un nom, calculé via SHA-1 ; même entrée = même résultat déterministe.

UUID Exemples rapides

Format standard :
550e8400-e29b-41d4-a716-446655440000
Format majuscules :
550E8400-E29B-41D4-A716-446655440000
Sans tirets :
550e8400e29b41d4a716446655440000
Avec accolades :
{550e8400-e29b-41d4-a716-446655440000}

UUID Cas d'utilisation courants

  • Identifiant unique pour des enregistrements de base de données ou ressources
  • Trace ID pour le suivi des journaux et événements
  • Identifiants publics difficiles à deviner
  • Identifiant unifié dans les interfaces inter-systèmes

UUID Questions fréquentes et pièges

  • v1 et confidentialité : v1 peut révéler la date/la localisation ; privilégiez v4 si la confidentialité est cruciale.
  • Les majuscules et minuscules sont-elles équivalentes ? : La comparaison est insensible à la casse.
  • Les tirets ne servent qu'à la présentation ; sauf contrainte, il est recommandé de les conserver.
  • Le format entre accolades est accepté dans certains environnements (ex. : registre Windows)
  • v5 est déterministe (même espace de noms + même nom => même UUID). Idéal pour les scénarios idempotents ; inadapté aux cas nécessitant une imprévisibilité.

Comment utiliser les UUID dans les langages de programmation

JavaScript
Générer
// UUID v4 (simple)
function uuidv4(){
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
    const r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
  });
}
const id = uuidv4();
UUID v7 (temps Unix + aléatoire)
// UUID v7 (Unix ms + randomness)
function uuidv7(){
  const cryptoObj = (globalThis.crypto || globalThis.msCrypto);
  const rb = n => { const a = new Uint8Array(n); cryptoObj?.getRandomValues ? cryptoObj.getRandomValues(a) : a.forEach((_,i)=>a[i]=Math.random()*256|0); return a; };
  const hex = b => Array.from(b).map(x=>x.toString(16).padStart(2,'0')).join('');
  const ts = BigInt(Date.now()).toString(16).padStart(12,'0');
  const ver = rb(2); ver[0] = (ver[0] & 0x0f) | 0x70;    // set version 7
  const vrn = rb(2); vrn[0] = (vrn[0] & 0x3f) | 0x80;    // RFC4122 variant
  const tail = rb(6);
  return `${ts.slice(0,8)}-${ts.slice(8,12)}-${hex(ver)}-${hex(vrn)}-${hex(tail)}`;
}
const id7 = uuidv7();
Valider
const re=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
re.test(id); // true/false
PHP
Générer
<?php
// v4 using random_bytes
function uuidv4(){
  $data = random_bytes(16);
  $data[6] = chr((ord($data[6]) & 0x0f) | 0x40);
  $data[8] = chr((ord($data[8]) & 0x3f) | 0x80);
  return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
$id = uuidv4();
UUID v7 (temps Unix + aléatoire)
<?php
// composer require ramsey/uuid:^4.7
use Ramsey\Uuid\Uuid;

$uuid7 = Uuid::uuid7();
Valider
<?php
$re = '/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i';
preg_match($re, $id) === 1; // true/false
Python
Générer
import uuid
# v4
uid = uuid.uuid4()
# v1
uid1 = uuid.uuid1()
UUID v7 (temps Unix + aléatoire)
# pip install uuid6
from uuid6 import uuid7

uid7 = uuid7()
Valider
import re
re_uuid = re.compile(r'^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', re.I)
bool(re_uuid.match(str(uid)))
Go
Générer
// go get github.com/google/uuid
import "github.com/google/uuid"

id := uuid.New()     // v4
id1 := uuid.NewUUID() // v1 (may return error)
UUID v7 (temps Unix + aléatoire)
// go get github.com/gofrs/uuid/v5
import (
  uuid "github.com/gofrs/uuid/v5"
)

id7, err := uuid.NewV7()
Valider
import "github.com/google/uuid"
_, err := uuid.Parse(id.String()) // err == nil means valid
Rust
Générer
// Cargo.toml: uuid = { version = "1", features = ["v4", "v1"] }
use uuid::Uuid;

let v4 = Uuid::new_v4();
// v1 requires a context/ts, often via external crate; shown for completeness
UUID v7 (temps Unix + aléatoire)
// Cargo.toml: uuid = { version = "1", features = ["v7"] }
use uuid::Uuid;

let v7 = Uuid::now_v7();
Valider
use uuid::Uuid;
let ok = Uuid::parse_str(v4.to_string().as_str()).is_ok();
Java
Générer
import java.util.UUID;

UUID id = UUID.randomUUID(); // v4
UUID v7 (temps Unix + aléatoire)
// Maven: com.github.f4b6a3:uuid-creator
import com.github.f4b6a3.uuid.UuidCreator;

UUID v7 = UuidCreator.getTimeOrderedEpoch(); // UUIDv7
Valider
import java.util.UUID;

try { UUID.fromString(id.toString()); /* valid */ } catch (IllegalArgumentException ex) { /* invalid */ }