Wygeneruj UUID (v1, v4, v5, v7)

generuje UUID (Universally Unique Identifier) w v1, v4, v5 (deterministycznie) lub v7 (time-ordered), zgodnie z RFC 4122

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ędzi
  • GET https://cdrn.fr/api/v1/tools/uuid-generator - zwraca schemat dla tego narzędzia
  • POST https://cdrn.fr/api/v1/tools/uuid-generator/execute - uruchamia to narzędzie z payloadem JSON