Generarea de UUID (v1, v4, v5, v7)

generează UUID-urile dvs. (Universally Unique Identifier) în v1, v4, v5 (determinist) sau v7 (time-ordered), conform RFC 4122

De ce să utilizezi UUID-uri?

UUID-urile (Universally Unique Identifier) sunt identificatori unici utilizați pentru a garanta unicitatea prin diferite sisteme și baze de date fără a necesita o coordonare centrală. Sunt frecvent utilizate în sisteme distribuite și aplicații web pentru a genera identificatori unici pentru resurse.

Versiuni de UUID luate în considerare

Acest instrument ia în considerare următoarele versiuni de UUID:

  • Versiunea 1: bazată pe timestamp și adresa MAC.
  • Versiunea 4: generată aleatoriu (cea mai utilizată).
  • Versiunea 5: bazată pe o amprentă SHA-1 a unui namespace și a unui nume (determinist: aceeași pereche namespace + nume va produce întotdeauna același UUID).
  • Versiunea 7: ordonată temporal, recomandată pentru cheile primare ale bazelor de date moderne (sortare lexicografică = sortare cronologică).

UUID v5: namespace și nume

Pentru a genera un UUID v5, trebuie să alegi un namespace standard și să furnizezi un nume:

  • DNS: de utilizat când numele este un nume de domeniu (de exemplu cdrn.fr).
  • URL: de utilizat când numele este un URL (de exemplu https://cdrn.fr/).
  • OID: de utilizat când numele este un identificator de obiect ISO.
  • X500: de utilizat când numele este un nume distinct X.500.

Generarea fiind deterministă, UUID v5 este deosebit de adaptat pentru a produce identificatori reproductibili plecând de la o dată stabilă.

Cum să generezi UUID-uri

Pe pagina principală, poți genera UUID-uri selectând versiunea dorită dintr-un meniu derulant și apăsând pe butonul de generare. Pentru versiunea 5, completează în plus namespace-ul și numele.

Imediat ce un UUID este generat, va apărea într-o linie de rezultat verde indicând că a fost generat cu succes. Dacă o eroare se produce, o linie roșie va afișa mesajul de eroare corespunzător.

Exemple de cod pentru a utiliza UUID-urile generate

Poți utiliza UUID-urile generate în aplicațiile tale integrându-le direct în codul tău. Iată un exemplu în PHP:


<?php
use Ramsey\Uuid\Uuid;

// Generează un UUID v4 (aleatoriu)
$uuidV4 = Uuid::uuid4();

// Generează un UUID v5 (determinist plecând de la un namespace și un nume)
$uuidV5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'cdrn.fr');

// Generează un UUID v7 (ordonat temporal)
$uuidV7 = Uuid::uuid7();

echo "UUID v4: " . $uuidV4->toString() . PHP_EOL;
echo "UUID v5: " . $uuidV5->toString() . PHP_EOL;
echo "UUID v7: " . $uuidV7->toString() . PHP_EOL;
?>

    

Validarea și analiza UUID-urilor

Poți de asemenea valida și analiza UUID-urile existente pentru a determina versiunea și validitatea. Iată un exemplu de cod în PHP:


<?php
use Ramsey\Uuid\Uuid;

// Validează un UUID
$uuidString = '123e4567-e89b-12d3-a456-426614174000';
if (Uuid::isValid($uuidString)) {
    $uuid = Uuid::fromString($uuidString);
    echo "UUID valid de versiune: " . $uuid->getFields()->getVersion();
} else {
    echo "UUID invalid";
}
?>

    

Întrebări frecvente

Care este diferența între UUID v1, v4, v5 și v7?

v1 combină un timestamp și adresa MAC a mașinii, ceea ce poate dezvălui informații sensibile. v4 este pur aleatoriu (122 biți de aleator), este versiunea cea mai utilizată. v5 este determinist: aceeași pereche namespace + nume produce întotdeauna același UUID datorită unui hash SHA-1. v7 integrează un timestamp în milisecunde la începutul identificatorului, ceea ce îl face sortat cronologic și ideal pentru cheile primare.

Care este probabilitatea de coliziune a unui UUID v4?

Un UUID v4 dispune de 122 biți aleatorii, adică aproximativ 5,3 × 10^36 valori posibile. Pentru a atinge 50% probabilitate de coliziune (paradoxul aniversărilor), ar trebui să se genereze aproximativ 2,7 × 10^18 UUID. În practică, pe o aplicație standard, probabilitatea de coliziune este neglijabilă. Este ceea ce permite generarea de identificatori pe partea clientului fără coordonare cu un server central.

De ce să privilegiezi UUID v7 pentru o cheie primară de bază de date?

Un UUID v4 inserat într-un index B-tree provoacă o fragmentare puternică: fiecare inserare cade într-o poziție aleatorie, ceea ce degradează performanțele și utilizarea cache-ului. UUID v7 începe cu un timestamp în milisecunde, deci noile linii se inserează întotdeauna la sfârșitul indexului. Performanțele de inserare se apropie atunci de cele ale unui BIGSERIAL, păstrând în același timp avantajele unui identificator universal.

La ce servesc namespace-urile DNS, URL, OID și X500 din UUID v5?

Aceste namespace-uri sunt UUID-uri predefinite în RFC 4122 care acționează ca prefix contextual pentru generarea deterministă. DNS se utilizează cu un nume de domeniu, URL cu un URL complet, OID cu un identificator ISO de obiect, X500 cu un nume distinct LDAP. Poți de asemenea să-ți definești propriul namespace privat: un UUID v4 generat o dată pentru aplicația ta, reutilizat ca rădăcină deterministă pentru toți identificatorii tăi v5.

UUID sau auto-increment pentru identificatorii din bază?

Auto-incrementul rămâne foarte eficient pentru baze monolitice și dezvăluie de bunăvoie secvența de scriere, ceea ce poate fi nedorit pe partea API publică. UUID-urile convin mai bine arhitecturilor distribuite, generării pe partea clientului, fuziunilor de baze, și expunerii publice de identificatori opaci. Compromisul ideal în 2026: UUID v7 în cheie primară, care combină universalitate, opacitate rezonabilă și performanțe bune de index.

UUID-urile generate tranzitează prin un server terț?

Generarea se efectuează în mediul cdrn.fr, fără apel la un serviciu extern. Pentru versiunile pur aleatorii (v4) sau temporale (v7), nicio informație sensibilă nu este necesară în intrare. Pentru v5, namespace-ul și numele pe care le furnizezi servesc doar pentru calculul SHA-1 local. Niciun identificator generat nu este jurnalizat, poți utiliza instrumentul pentru a produce UUID-uri destinate contextelor confidențiale.

Exemplu de cerere

curl -X POST https://cdrn.fr/api/v1/tools/uuid-generator/execute \
  -H "Content-Type: application/json" \
  -d '{"version":"uuid_version_1","quantity":3,"namespace":"namespace_dns","name":"..."}'

Schema de intrare

Câmp Tip Obligatoriu Implicit
version choice (uuid_version_1, uuid_version_4, uuid_version_5, uuid_version_7)
quantity integer 3
namespace choice (namespace_dns, namespace_url, namespace_oid, namespace_x500)
name string

Puncte de acces

  • GET https://cdrn.fr/api/v1/tools - listează toate instrumentele disponibile
  • GET https://cdrn.fr/api/v1/tools/uuid-generator - obține schema acestui instrument
  • POST https://cdrn.fr/api/v1/tools/uuid-generator/execute - execută acest instrument cu un payload JSON