Wygeneruj UUID (v1, v4, v5, v7)
- Panel
- Dokumentacja
- API
Dlaczego używać UUID?
UUID (Universally Unique Identifier) to unikalne identyfikatory używane do gwarantowania unikalności w różnych systemach i bazach danych bez konieczności centralnej koordynacji. Są powszechnie używane w systemach rozproszonych i aplikacjach webowych do generowania unikalnych identyfikatorów zasobów.
Obsługiwane wersje UUID
To narzędzie obsługuje następujące wersje UUID:
- Wersja 1: oparta na znaczniku czasu i adresie MAC.
- Wersja 4: generowana losowo (najczęściej używana).
- Wersja 5: oparta na odcisku SHA-1 namespace i nazwy (deterministyczna: ta sama para namespace + nazwa zawsze produkuje ten sam UUID).
- Wersja 7: uporządkowana czasowo, zalecana dla kluczy głównych nowoczesnych baz danych (sortowanie leksykograficzne = sortowanie chronologiczne).
UUID v5: namespace i nazwa
Aby wygenerować UUID v5, musisz wybrać standardowy namespace i podać nazwę:
- DNS: do użycia, gdy nazwa to nazwa domeny (na przykład
cdrn.fr). - URL: do użycia, gdy nazwa to URL (na przykład
https://cdrn.fr/). - OID: do użycia, gdy nazwa to identyfikator obiektu ISO.
- X500: do użycia, gdy nazwa to wyróżniona nazwa X.500.
Ponieważ generacja jest deterministyczna, UUID v5 jest szczególnie odpowiedni do produkowania reprodukowalnych identyfikatorów z stabilnej danej.
Jak generować UUID
Na stronie głównej możesz generować UUID, wybierając pożądaną wersję z rozwijanego menu i klikając przycisk generowania. Dla wersji 5 podaj dodatkowo namespace i nazwę.
Gdy UUID zostanie wygenerowany, pojawi się w zielonej linii wyniku wskazując, że został wygenerowany pomyślnie. W przypadku błędu czerwona linia wyświetli odpowiedni komunikat błędu.
Przykłady kodu do używania wygenerowanych UUID
Możesz używać wygenerowanych UUID w swoich aplikacjach, osadzając je bezpośrednio w kodzie. Oto przykład w PHP:
<?php
use Ramsey\Uuid\Uuid;
// Générer un UUID v4 (aléatoire)
$uuidV4 = Uuid::uuid4();
// Générer un UUID v5 (déterministe à partir d'un namespace et d'un nom)
$uuidV5 = Uuid::uuid5(Uuid::NAMESPACE_DNS, 'cdrn.fr');
// Générer un UUID v7 (ordonnancé temporellement)
$uuidV7 = Uuid::uuid7();
echo "UUID v4 : " . $uuidV4->toString() . PHP_EOL;
echo "UUID v5 : " . $uuidV5->toString() . PHP_EOL;
echo "UUID v7 : " . $uuidV7->toString() . PHP_EOL;
?>
Walidacja i analiza UUID
Możesz również walidować i analizować istniejące UUID, aby określić ich wersję i ważność. Oto przykład kodu w PHP:
<?php
use Ramsey\Uuid\Uuid;
// Valider un UUID
$uuidString = '123e4567-e89b-12d3-a456-426614174000';
if (Uuid::isValid($uuidString)) {
$uuid = Uuid::fromString($uuidString);
echo "UUID valide de version : " . $uuid->getFields()->getVersion();
} else {
echo "UUID invalide";
}
?>
Najczęściej zadawane pytania
Jaka jest różnica między UUID v1, v4, v5 a v7?
v1 łączy znacznik czasu i adres MAC maszyny, co może ujawnić wrażliwe informacje. v4 jest czysto losowy (122 bity losowości), jest to najczęściej używana wersja. v5 jest deterministyczna: ta sama para namespace + nazwa zawsze produkuje ten sam UUID dzięki hashowi SHA-1. v7 integruje timestamp w milisekundach na początku identyfikatora, co czyni go posortowanym chronologicznie i idealnym dla kluczy głównych.
Jakie jest prawdopodobieństwo kolizji UUID v4?
UUID v4 dysponuje 122 losowymi bitami, czyli około 5,3 × 10^36 możliwymi wartościami. Aby osiągnąć 50% prawdopodobieństwa kolizji (paradoks urodzin), trzeba by wygenerować około 2,7 × 10^18 UUID. W praktyce, w standardowej aplikacji, prawdopodobieństwo kolizji jest pomijalne. To właśnie pozwala generować identyfikatory po stronie klienta bez koordynacji z centralnym serwerem.
Dlaczego preferować UUID v7 dla klucza głównego bazy danych?
UUID v4 wstawiony do indeksu B-tree powoduje silną fragmentację: każde wstawienie trafia w losową pozycję, co degraduje wydajność i użycie pamięci podręcznej. UUID v7 zaczyna się od timestampu w milisekundach, więc nowe wiersze zawsze wstawiają się na końcu indeksu. Wydajność wstawiania zbliża się wtedy do BIGSERIAL, zachowując zalety uniwersalnego identyfikatora.
Do czego służą namespacy DNS, URL, OID i X500 dla UUID v5?
Te namespacy to predefiniowane UUID w RFC 4122, które działają jako kontekstowy prefiks dla deterministycznej generacji. DNS używa się z nazwą domeny, URL z kompletnym URL, OID z identyfikatorem ISO obiektu, X500 z wyróżnioną nazwą LDAP. Możesz też zdefiniować własny prywatny namespace: UUID v4 wygenerowany raz dla twojej aplikacji, ponownie używany jako deterministyczny korzeń dla wszystkich twoich identyfikatorów v5.
UUID czy auto-inkrementacja dla identyfikatorów w bazie?
Auto-inkrementacja pozostaje bardzo wydajna dla baz monolitycznych i chętnie ujawnia sekwencję zapisu, co może być niepożądane w publicznym API. UUID lepiej pasują do architektur rozproszonych, generacji po stronie klienta, fuzji baz i publicznej ekspozycji nieprzezroczystych identyfikatorów. Idealny kompromis w 2026 roku: UUID v7 jako klucz główny, który łączy uniwersalność, rozsądną nieprzezroczystość i dobrą wydajność indeksu.
Czy wygenerowane UUID przechodzą przez serwer zewnętrzny?
Generacja odbywa się w środowisku cdrn.fr, bez wywoływania zewnętrznej usługi. Dla wersji czysto losowych (v4) lub czasowych (v7) żadna wrażliwa informacja nie jest potrzebna na wejściu. Dla v5 namespace i nazwa, które dostarczasz, służą tylko do lokalnego obliczenia SHA-1. Żaden wygenerowany identyfikator nie jest logowany, możesz używać narzędzia do produkcji UUID przeznaczonych do poufnych kontekstów.
Przykładowe zapytanie
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":"..."}'
Schemat wejściowy
| Pole | Typ | Wymagane | Domyślnie |
|---|---|---|---|
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 | – | – |
Punkty końcowe
GET https://cdrn.fr/api/v1/tools- lista wszystkich dostępnych narzędziGET https://cdrn.fr/api/v1/tools/uuid-generator- zwraca schemat dla tego narzędziaPOST https://cdrn.fr/api/v1/tools/uuid-generator/execute- uruchamia to narzędzie z payloadem JSON