Whiz Tools

Generátor UUID

Vygenerovaný UUID

Struktura UUID
Čas nízký

Generátor UUID

Úvod

Univerzálně jedinečný identifikátor (UUID) je 128bitové číslo používané k identifikaci informací v počítačových systémech. UUID jsou standardizovány Open Software Foundation (OSF) jako součást Distribuovaného výpočetního prostředí (DCE). Tyto identifikátory jsou navrženy tak, aby byly jedinečné jak v prostoru, tak v čase, což je činí ideálními pro různé aplikace v distribuovaných systémech a mimo ně.

Tento nástroj pro generování UUID vám umožňuje vytvářet jak verzi 1 (na základě času), tak verzi 4 (náhodné) UUID. Tyto identifikátory jsou užitečné v různých scénářích, kde je vyžadováno jedinečné identifikování, jako jsou klíče databáze, distribuované systémy a síťové protokoly.

Jak UUID fungují

Struktura UUID

UUID je obvykle reprezentováno jako 32 hexadecimálních číslic, zobrazených ve pěti skupinách oddělených pomlčkami, ve formátu 8-4-4-4-12 pro celkový počet 36 znaků (32 alfanumerických znaků a 4 pomlčky). Například:

550e8400-e29b-41d4-a716-446655440000

128 bitů UUID je rozděleno do specifických polí, z nichž každé nese různé informace v závislosti na verzi UUID:

  • 32 bitů pro pole time_low
  • 16 bitů pro pole time_mid
  • 16 bitů pro pole time_hi_and_version
  • 8 bitů pro pole clock_seq_hi_and_reserved
  • 8 bitů pro pole clock_seq_low
  • 48 bitů pro pole node

Zde je diagram ilustrující strukturu UUID:

A B C D E F A: time_low (32 bitů) B: time_mid (16 bitů) C: time_hi_and_version (16 bitů) D: clock_seq_hi_and_reserved (8 bitů) E: clock_seq_low (8 bitů) F: node (48 bitů)

Verze UUID

Existuje několik verzí UUID, z nichž každá má svůj vlastní způsob generování:

  1. Verze 1 (na základě času): Používá aktuální časové razítko a MAC adresu počítače.
  2. Verze 2 (DCE Security): Podobná verzi 1, ale zahrnuje identifikátor místní domény.
  3. Verze 3 (na základě názvu, MD5): Generována hashováním identifikátoru jmenného prostoru a názvu.
  4. Verze 4 (náhodná): Generována pomocí náhodného nebo pseudo-náhodného čísla.
  5. Verze 5 (na základě názvu, SHA-1): Podobná verzi 3, ale používá SHA-1 hashování.

Tento nástroj se zaměřuje na generování verzí 1 a 4 UUID.

Vzorec

Generování UUID verze 1

UUID verze 1 jsou generována pomocí následujících komponent:

  1. Časové razítko: 60bitová hodnota představující počet 100nanosekundových intervalů od 15. října 1582 (data gregoriánské reformy křesťanského kalendáře).
  2. Sekvence hodin: 14bitová hodnota používaná k vyhnutí se duplicitám v případě, že je hodiny nastaveny zpět.
  3. Uzlová hodnota: 48bitová hodnota, obvykle odvozená z MAC adresy počítače.

Vzorec pro generování UUID verze 1 lze vyjádřit jako:

UUID = (časové_razítko * 2^64) + (sekvence_hodin * 2^48) + uzel

Generování UUID verze 4

UUID verze 4 jsou generována pomocí kryptograficky silného generátoru náhodných čísel. Vzorec je jednoduše:

UUID = náhodné_128bitové_číslo

S konkrétními bity nastavenými tak, aby označovaly verzi (4) a variantu.

Případy použití

UUID mají nespočet aplikací v různých oblastech informatiky a softwarového inženýrství:

  1. Klíče databáze: UUID se často používají jako primární klíče v databázích, zejména v distribuovaných systémech, kde může více uzlů generovat záznamy současně.

  2. Distribuované systémy: V rozsáhlých distribuovaných systémech pomáhají UUID jedinečně identifikovat zdroje, transakce nebo události napříč více uzly nebo datovými centry.

  3. Adresování obsahu: UUID mohou být použity k vytvoření jedinečných identifikátorů pro obsah v systémech s adresováním obsahu.

  4. Správa relací: Webové aplikace často používají UUID k řízení uživatelských relací, což zajišťuje, že každá relace má jedinečný identifikátor.

  5. Identifikace zařízení IoT: V aplikacích Internetu věcí (IoT) mohou být UUID použity k jedinečné identifikaci jednotlivých zařízení v síti.

Alternativy

I když jsou UUID široce používány, existují alternativní přístupy k generování jedinečných identifikátorů:

  1. Automaticky se zvyšující ID: Jednoduché a běžně používané v systémech s jednou databází, ale nejsou vhodné pro distribuované prostředí.

  2. ID na základě časového razítka: Mohou být užitečné pro časově uspořádaná data, ale mohou čelit problémům s kolizemi v situacích s vysokou konkurencí.

  3. Snowflake ID: Vyvinuté Twitterem, tyto ID kombinují časové razítko a číslo pracovníka k generování jedinečných ID v distribuovaných systémech.

  4. ULID (Univerzálně jedinečný lexikograficky seřaditelný identifikátor): Novější alternativa, která má být uživatelsky přívětivější a seřaditelnější než UUID.

Historie

Koncept UUID byl poprvé představen v systému Apollo Network Computing a později standardizován Open Software Foundation (OSF) jako součást Distribuovaného výpočetního prostředí (DCE) v 90. letech. První specifikace byla publikována v roce 1997 jako ISO/IEC 11578:1996 a později revidována v roce 2005 jako součást ISO/IEC 9834-8:2005.

Klíčové milníky v historii UUID:

    1. léta: Apollo Computer vyvíjí koncept UUID pro svůj systém Network Computing.
  • 1997: První specifikace UUID publikována jako ISO/IEC 11578:1996.
  • 2005: Specifikace UUID revidována a publikována jako součást ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definuje formát UUID a algoritmy generování používané dnes.

V průběhu času se UUID staly nezbytným nástrojem v distribuovaných systémech a návrhu databází, s různými implementacemi a adaptacemi napříč různými programovacími jazyky a platformami.

Příklady kódu

Zde jsou příklady generování UUID v různých programovacích jazycích:

import uuid

## Generování UUID verze 4 (náhodné)
náhodné_uuid = uuid.uuid4()
print(f"UUID verze 4: {náhodné_uuid}")

## Generování UUID verze 1 (na základě času)
uuid_na_zaklade_casu = uuid.uuid1()
print(f"UUID verze 1: {uuid_na_zaklade_casu}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generování UUID verze 4 (náhodné)
const náhodnéUuid = uuidv4();
console.log(`UUID verze 4: ${náhodnéUuid}`);

// Generování UUID verze 1 (na základě času)
const uuidNaZakladeCasu = uuidv1();
console.log(`UUID verze 1: ${uuidNaZakladeCasu}`);
import java.util.UUID;

public class GenerátorUuid {
    public static void main(String[] args) {
        // Generování UUID verze 4 (náhodné)
        UUID náhodnéUuid = UUID.randomUUID();
        System.out.println("UUID verze 4: " + náhodnéUuid);

        // Generování UUID verze 1 (na základě času)
        UUID uuidNaZakladeCasu = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID verze 1: " + uuidNaZakladeCasu);
    }
}
require 'securerandom'

## Generování UUID verze 4 (náhodné)
náhodné_uuid = SecureRandom.uuid
puts "UUID verze 4: #{náhodné_uuid}"

## Ruby nemá vestavěnou metodu pro UUID verze 1
## K tomu byste potřebovali použít gem jako 'uuidtools'
<?php
// Generování UUID verze 4 (náhodné)
náhodnéUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "UUID verze 4: " . $náhodnéUuid . "\n";

// PHP nemá vestavěnou metodu pro UUID verze 1
// K tomu byste potřebovali použít knihovnu jako 'ramsey/uuid'
?>

Odkazy

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Mezinárodní organizace pro standardizaci. (2005). Informační technologie – Procedury pro provoz OSI registračních autorit: Generování a registrace univerzálně jedinečných identifikátorů (UUID) a jejich použití jako komponenty ASN.1 Object Identifier. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Univerzálně jedinečný identifikátor. (2023). V Wikipedii. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). V Wikipedii. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback