Generovat UUID (v1, v4, v5, v7)
- Dashboard
- Dokumentace
- API
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ástrojeGET https://cdrn.fr/api/v1/tools/uuid-generator- získá schéma tohoto nástrojePOST https://cdrn.fr/api/v1/tools/uuid-generator/execute- spustí tento nástroj s JSON payloadem