Generovat UUID (v1, v4, v5, v7)

generuje vaše UUID (Universally Unique Identifier) v1, v4, v5 (deterministické) nebo v7 (time-ordered), v souladu s RFC 4122

Proč používat UUID?

UUID (Universally Unique Identifier) jsou unikátní identifikátory používané pro garantování unikátnosti napříč odlišnými systémy a databázemi bez nutnosti centrální koordinace. Jsou běžně používány v distribuovaných systémech a webových aplikacích pro generování unikátních identifikátorů zdrojů.

Podporované UUID verze

Tento nástroj podporuje následující UUID verze:

  • Verze 1: založená na timestampu a MAC adrese.
  • Verze 4: generována náhodně (nejpoužívanější).
  • Verze 5: založená na SHA-1 otisku namespace a názvu (deterministická: stejná dvojice namespace + jméno vždy produkuje stejné UUID).
  • Verze 7: seřazená časově, doporučená pro primární klíče moderních databází (lexikografické řazení = chronologické řazení).

UUID v5: namespace a jméno

Pro generování UUID v5 musíte zvolit standardní namespace a poskytnout jméno:

  • DNS: k použití, když je jméno doménové jméno (například cdrn.fr).
  • URL: k použití, když je jméno URL (například https://cdrn.fr/).
  • OID: k použití, když je jméno identifikátor objektu ISO.
  • X500: k použití, když je jméno rozlišovací jméno X.500.

Jelikož je generování deterministické, UUID v5 je obzvláště vhodné pro produkci reprodukovatelných identifikátorů ze stabilních dat.

Jak generovat UUID

Na úvodní stránce můžete generovat UUID výběrem požadované verze v rozbalovacím menu a kliknutím na tlačítko generování. Pro verzi 5 vyplňte navíc namespace a jméno.

Jakmile je UUID vygenerováno, objeví se na zeleném řádku výsledku indikujícím, že bylo úspěšně vygenerováno. Pokud dojde k chybě, červený řádek zobrazí odpovídající chybovou zprávu.

Příklady kódu pro použití generovaných UUID

Generovaná UUID můžete použít ve vašich aplikacích přímou integrací do vašeho kódu. Zde je příklad v PHP:


<?php
use Ramsey\Uuid\Uuid;

// Generovat UUID v4 (náhodné)
$uuidV4 = Uuid::uuid4();

// Generovat UUID v5 (deterministické z namespace a jména)
$uuidV5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'cdrn.fr');

// Generovat UUID v7 (časově seřazené)
$uuidV7 = Uuid::uuid7();

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

    

Validovat a analyzovat UUID

Existující UUID můžete také validovat a analyzovat pro určení verze a validity. Zde je příklad kódu v PHP:


<?php
use Ramsey\Uuid\Uuid;

// Validovat UUID
$uuidString = '123e4567-e89b-12d3-a456-426614174000';
if (Uuid::isValid($uuidString)) {
    $uuid = Uuid::fromString($uuidString);
    echo "Validní UUID verze: " . $uuid->getFields()->getVersion();
} else {
    echo "Nevalidní UUID";
}
?>

    

Často kladené otázky

Jaký rozdíl mezi UUID v1, v4, v5 a v7?

v1 kombinuje timestamp a MAC adresu počítače, což může odhalit citlivé informace. v4 je čistě náhodná (122 bitů náhody), je to nejpoužívanější verze. v5 je deterministická: stejná dvojice namespace + jméno produkuje vždy stejné UUID díky SHA-1 hashi. v7 integruje millisekundový timestamp na začátku identifikátoru, což ho činí chronologicky seřazeným a ideálním pro primární klíče.

Jaká je pravděpodobnost kolize UUID v4?

UUID v4 disponuje 122 náhodnými bity, tedy přibližně 5,3 × 10^36 možnými hodnotami. K dosažení 50% pravděpodobnosti kolize (narozeninový paradox) by bylo třeba vygenerovat přibližně 2,7 × 10^18 UUID. V praxi je na standardní aplikaci pravděpodobnost kolize zanedbatelná. To umožňuje generovat identifikátory na straně klienta bez koordinace s centrálním serverem.

Proč preferovat UUID v7 pro primární klíč databáze?

UUID v4 vložené do B-tree indexu způsobuje silnou fragmentaci: každé vložení padá na náhodnou pozici, což degraduje výkon a využití cache. UUID v7 začíná millisekundovým timestampem, takže se nové řádky vždy vkládají na konec indexu. Vkládací výkon se pak blíží BIGSERIAL, přitom zachovává výhody univerzálního identifikátoru.

K čemu slouží DNS, URL, OID a X500 namespaces UUID v5?

Tyto namespaces jsou předdefinované UUID v RFC 4122, které fungují jako kontextový prefix pro deterministické generování. DNS se používá s doménovým jménem, URL s úplným URL, OID s ISO identifikátorem objektu, X500 s LDAP rozlišovacím jménem. Můžete také definovat vlastní privátní namespace: UUID v4 vygenerované jednou pro vaši aplikaci, znovupoužité jako deterministický kořen pro všechny vaše v5 identifikátory.

UUID nebo auto-increment pro databázové identifikátory?

Auto-increment zůstává velmi efektivní pro monolitické databáze a ochotně odhaluje zápisovou sekvenci, což může být nežádoucí na straně veřejného API. UUID se lépe hodí pro distribuované architektury, generování na straně klienta, fúze databází a veřejné vystavování opakních identifikátorů. Ideální kompromis v 2026: UUID v7 jako primární klíč, který kombinuje univerzalitu, rozumnou opakitost a dobré výkony indexu.

Procházejí generovaná UUID třetím serverem?

Generování probíhá v prostředí cdrn.fr bez volání externí služby. Pro čistě náhodné (v4) nebo časové (v7) verze není vstupně vyžadována žádná citlivá informace. Pro v5 slouží namespace a jméno, které poskytnete, pouze k lokálnímu SHA-1 výpočtu. Žádný generovaný identifikátor není logován, nástroj můžete použít pro produkci UUID určených pro důvěrné kontexty.

Ukázka požadavku

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":"..."}'

Vstupní schéma

Pole Typ Povinné Výchozí
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

Koncové body

  • GET https://cdrn.fr/api/v1/tools - vypíše všechny dostupné nástroje
  • GET https://cdrn.fr/api/v1/tools/uuid-generator - získá schéma tohoto nástroje
  • POST https://cdrn.fr/api/v1/tools/uuid-generator/execute - spustí tento nástroj s JSON payloadem