# UUID generatorius

> Generuokite UUID (universaliai unikalų identifikatorių) internetu nemokamai. Palaiko visas versijas (v1, v3–v7), galima kurti iki tūkstančių UUID vienu metu.

URL: https://acrafto.com/lt/uuid-generatorius/

Tools are interactive browser apps; there is no public API, no endpoints to call and no server-side processing. To use a tool, open its HTML page in a browser.

## Kas yra UUID?

UUID (Universally Unique Identifier) yra 128 bitų identifikatorius, naudojamas kompiuterinėse sistemose informacijai unikaliai identifikuoti. UUID standartizuotas pagal RFC 4122 ir, dėl savo didžiulės entropijos, garantuoja praktiškai nulinę susidūrimo tikimybę – tai reiškia, kad du nepriklausomai sugeneruoti UUID beveik neabejotinai bus unikalūs.

UUID turi standartinį formatą: `xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx`, kur kiekvienas `x` yra šešioliktainis skaitmuo (0-9, a-f), `M` nurodo UUID versiją, o `N` – variantą.

## UUID versijos

### UUID v1 (Laiko žyma + MAC adresas)

UUID v1 pagrįstas dabartine laiko žyma (timestamp) ir atsitiktine verte (naršyklėje vietoj MAC adreso). Jis naudoja 100 nanosekundžių intervalus nuo 1582 m. spalio 15 d. (Grigaliaus kalendorius).

**Naudojimas:**

- Situacijos, kai reikia chronologiškai rūšiuoti UUID
- Derinimas ir registravimas (UUID yra informacija apie sukūrimo laiką)
- Paskirstytos sistemos su laiko sinchronizavimu

**Pavyzdys:** `6ba7b810-9dad-11d1-80b4-00c04fd430c8`

**Privalumai:**

- UUID galima rūšiuoti chronologiškai pagal sukūrimo laiką
- Naudinga auditui ir derinimui
- Yra laiko žymos informacija

**Trūkumai:**

- Potenciali saugumo rizika – yra laiko žyma
- Naršyklėje nėra tikrojo MAC adreso (pakeista atsitiktine verte)
- Prasta DB lokalė (laiko žyma yra žemesniojo tvarkos bituose)

### UUID v3 (MD5 maiša)

UUID v3 generuojamas naudojant MD5 maišą iš vardų srities UUID ir pavadinimo. Deterministinis – ta pati vardų sritis + pavadinimas visada sukurs tą patį UUID.

**Naudojimas:**

- URL, DNS pavadinimų ar kitų identifikatorių konvertavimas į UUID
- Situacijos, kai reikia atkuriamų UUID
- Atvaizdavimas tarp skirtingų identifikavimo sistemų

**Pavyzdys:** `a3bb189e-8bf9-3888-9912-ace4e6543002`

**Privalumai:**

- Deterministinis (tas pats įvestis = tas pats išvestis)
- Idealiai tinka žinomų identifikatorių konvertavimui
- Jokių susidūrimų skirtingoms įvestims

**Trūkumai:**

- MD5 yra pasenęs algoritmas (pirmenybę teikite v5)
- Reikalinga vardų sritis ir pavadinimas
- Negalima atkurti originalios įvesties

### UUID v4 (Atsitiktinis) – REKOMENDUOJAMA

Dažniausiai naudojama UUID versija. UUID v4 generuojamas grynai atsitiktinai, naudojant kriptografiškai saugų atsitiktinių skaičių generatorių (`crypto.getRandomValues()`).

**Naudojimas:**

- Duomenų bazės pirminiai raktai
- Sesijos identifikatoriai (session IDs)
- Unikalūs failų pavadinimai
- API prieigos raktai (tokenai)
- Bendrieji tikslai, kai reikia garantuotai unikalaus ID

**Pavyzdys:** `f47ac10b-58cc-4372-a567-0e02b2c3d479`

**Privalumai:**

- Maksimali entropija ir saugumas
- Nepriklausomybė nuo laiko ar sistemos parametrų
- Paprasčiausias įgyvendinimas

**Susidūrimo tikimybė:** Generuojant 1 milijardą UUID per sekundę 100 metų, susidūrimo tikimybė yra apytiksliai 0,00000006%.

### UUID v5 (SHA-1 maiša)

UUID v5 yra toks pats kaip v3, tačiau naudoja SHA-1 vietoj MD5. Šiuolaikiškesnė ir saugesnė alternatyva v3.

**Naudojimas:**

- Tas pats kaip v3, bet su geresniu saugumu
- Naujiems projektams teiktina pirmenybė prieš v3
- UUID generavimas iš URL, DNS pavadinimų, OID, X.500 DN

**Pavyzdys:** `886313e1-3b8a-5372-9b90-0c9aee199e5d`

**Privalumai:**

- Deterministinis
- SHA-1 yra patikimesnis nei MD5
- Tinka atvaizdavimui tarp sistemų

**Trūkumai:**

- SHA-1 taip pat laikomas pasenusiu (bet vis dar saugesnis nei MD5)
- Reikalinga vardų sritis ir pavadinimas

### UUID v6 (Rūšiuota laiko žyma)

UUID v6 yra patobulinta v1 versija su perskirstytais laiko bitais geresniam DB indeksavimui. Skirta išspręsti lokalizacijos problemas duomenų bazėse.

**Naudojimas:**

- Duomenų bazės pirminiai raktai su laiko rūšiavimu
- Sistemos, reikalaujančios chronologinio rūšiavimo ir DB našumo
- Šiuolaikiškesnė alternatyva v1

**Pavyzdys:** `1ec9414c-232a-6b00-b3c8-9e6bdeced846`

**Privalumai:**

- Geresnė DB lokalė nei v1 (laiko žyma aukštesniojo tvarkos bituose)
- Chronologinis rūšiavimas
- Suderinama su UUID standartu

**Trūkumai:**

- Mažiau naudojama nei v1/v4
- Vis dar yra laiko informacija (saugumo rizika)

### UUID v7 (Unix laiko žyma)

UUID v7 naudoja Unix laiko žymą (milisekundės nuo 1970 m.) + atsitiktinius bitus. Naujausia UUID versija su geriausia DB lokale.

**Naudojimas:**

- Šiuolaikinės duomenų bazės pirminiai raktai
- Sistemos, reikalaujančios našumo + laiko rūšiavimo
- v1/v6 pakeitimas naujuose projektuose

**Pavyzdys:** `017f22e2-79b0-7cc3-98c4-dc0c0c07398f`

**Privalumai:**

- Geriausia DB lokalė iš visų versijų
- Unix laiko žyma yra standartinė
- Sujungia atsitiktinumo ir laiko rūšiavimo privalumus

**Trūkumai:**

- Santykinai nauja specifikacija (RFC 4122bis)
- Mažiau palaikoma senose sistemose

## Kurią UUID versiją naudoti?

### Sprendimų vadovas

**Reikia maksimalaus saugumo ir atsitiktinumo?** → Naudokite **UUID v4** (dažniausias pasirinkimas)

**Reikia laiko rūšiavimo ir DB našumo?** → Naudokite **UUID v7** (moderni) arba **UUID v6** (standartas)

**Reikia atkuriamų UUID iš esamų identifikatorių?** → Naudokite **UUID v5** (SHA-1) arba **UUID v3** (MD5, sena versija)

**Reikia laiko žymos ir audito įrašo?** → Naudokite **UUID v1** (sena versija, prastesnis DB našumas)

### Duomenų bazės

**Naujiems projektams:** UUID v7 arba v4

- **v7** idealiai tinka laiko rūšiavimui + našumui
- **v4** maksimaliam atsitiktinumui be laiko informacijos

**Senioms sistemoms:** UUID v1 arba v6

- **v6** turi geresnę DB lokalę nei v1
- **v1** yra plačiai palaikomas

**UUID kaip pirminio rakto privalumai:**

- **Globalus unikalumas** – Galite sujungti duomenis iš skirtingų duomenų bazių be konfliktų
- **Saugumas** – Priešingai nei nuoseklių ID (1, 2, 3…), negalima atspėti kitų verčių
- **Paskirstytos sistemos** – UUID gali būti generuojami nepriklausomai keliuose serveriuose be koordinacijos
- **Duomenų bazių sujungimas** – Sujungus dvi duomenų bazes, nekyla konfliktų

**Trūkumai:**

- Didesnis dydis (16 baitų prieš 4-8 baitus sveikajam skaičiui)
- Lėtesnis indeksavimas kai kuriose duomenų bazėse (naudokite v6/v7 geresniam našumui)
- Mažiau skaitomas žmogui

### API ir žiniatinklio paslaugos

- **REST API** – Unikalūs resursų identifikatoriai
- **GraphQL** – Globalūs mazgų identifikatoriai
- **Webhookai** – Užklausų ir atsakymų stebėjimas
- **Prieigos raktai** – Sesijos ID, atnaujinimo raktai

### Failai ir saugykla

- **Failų pavadinimai** – Kolizijų prevencija įkeliant
- **S3/Cloud saugykla** – Unikalūs objekto keliai
- **Talpyklos raktai** – Identifikatoriai talpyklos sistemose

### Frontend programos

- **React/Vue komponentai** – Unikalūs sąrašų raktai
- **Laikinieji ID** – ID prieš išsaugant duomenų bazėje
- **Vietinė saugykla** – Išsaugotų duomenų raktai
- **Neprisijungus veikiančios programos** – ID generavimas be prisijungimo prie serverio

## Išplėstinės generatoriaus funkcijos

### UUID generavimas su pasirinktiniu laiku

Laiku pagrįstoms versijoms (v1, v6, v7) galite pasirinkti bet kurią laiko žymą naudodami datos ir laiko parinkiklį. Tai naudinga:

**Testavimui:**

- Praeityje sukurtų UUID imitavimas
- Laiko rūšiavimo testavimas duomenų bazėse
- UUID atkūrimas derinimui

**Duomenų migracijai:**

- UUID generavimas su istoriniais laiko žymais
- Duomenų papildymas teisingomis laiko žymos vertėmis
- Duomenų importavimas iš skirtingų laikotarpių

**Auditui ir atitikčiai:**

- UUID rekonstrukcija pagal įrašo sukūrimo laiką
- Retroaktyvus identifikatorių generavimas

**Naudojimo pavyzdys:**

1. Pasirinkite v1, v6 arba v7 versiją
2. Nustatykite datą ir laiką naudodami datos ir laiko parinkiklį
3. Sugeneruokite UUID su savo pasirinkta laiko žyma

### Maišavimu pagrįsti UUID (v3, v5)

Deterministiniams UUID galite naudoti v3 (MD5) arba v5 (SHA-1) versijas:

**Kaip naudoti:**

1. Pasirinkite vardų sritį pagal savo identifikatoriaus tipą
2. Įveskite pavadinimą/reikšmę
3. Sugeneruokite UUID

**Pavyzdžiai:**

| Vardų sritis | Pavadinimas (įvestis) | Naudojimas |
| --- | --- | --- |
| DNS | `example.com` | Domeno vardo konvertavimas į UUID |
| DNS | `google.com` | Kiekviena svetainė turi unikalų UUID |
| URL | `https://example.com/page` | URL konvertavimas į UUID |
| URL | `https://api.example.com/users/123` | API galinis taškas kaip UUID |
| OID | `1.3.6.1.4.1.343` | Objekto identifikatorius į UUID |
| X.500 | `CN=John Doe,O=Company` | Distinguished Name į UUID |

**Svarbios savybės:**

- ✅ **Deterministinis**: Ta pati įvestis = visada tas pats UUID
- ✅ **Atkuriamas**: Galite UUID atkurti bet kuriuo metu
- ✅ **Nuoseklus**: Tas pats UUID skirtingose sistemose
- ❌ **Negalima iškoduoti**: Iš UUID negalima atkurti originalaus pavadinimo
- ℹ️ **Vienas UUID**: V3/v5 atveju generuojamas tik vienas UUID (ta pati įvestis = tas pats išvestis)

**Praktinis naudojimas:**

```
// Pavyzdys: URL konvertavimas į UUID v5
Namespace: URL
Name: https://example.com/api/users/123
Result: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// Tas pats įvestis = visada tas pats UUID
Namespace: DNS
Name: google.com
Result: visada tas pats UUID, skirtas google.com
```

## Kaip saugiai naudoti UUID?

### Kriptografinis saugumas

Mūsų generatorius naudoja `crypto.getRandomValues()`, kuris yra kriptografiškai saugus atsitiktinių skaičių generatorius. Priešingai nei `Math.random()`, kuris yra nuspėjamas ir netinkamas saugumo tikslams, `crypto.getRandomValues()` suteikia tikrąją entropiją, tinkančią:

- Saugumo prieigos raktų generavimui
- Sesijos ID
- API raktams
- Kriptografinėms programoms

### UUID versijų palyginimas

| Versija | Pagrindas | Susidūrimai | Laiko rūšiavimas | DB našumas | Naudojimas |
| --- | --- | --- | --- | --- | --- |
| v1 | Laiko žyma + MAC | Maža | ✅ Taip | ❌ Blogesnis | Sena versija, auditas |
| v3 | MD5 maiša | Jokių (deterministinis) | ❌ Ne | ⚠️ Vidutinis | Konvertavimas (sena versija) |
| v4 | Atsitiktinis | Itin maža | ❌ Ne | ⚠️ Vidutinis | Bendras naudojimas |
| v5 | SHA-1 maiša | Jokių (deterministinis) | ❌ Ne | ⚠️ Vidutinis | Konvertavimas (rekomenduojama) |
| v6 | Rūšiuota laiko žyma | Maža | ✅ Taip | ✅ Geresnis | Moderni DB su laiku |
| v7 | Unix laiko žyma | Maža | ✅ Taip | ✅ Geriausias | Nauji projektai |

### UUID vs kiti identifikatoriai

| Tipas | Dydis | Susidūrimai | Laiko rūšiavimas | Naudojimas |
| --- | --- | --- | --- | --- |
| Automatinio didinimo ID | 4-8 baitai | Garantuotai unikalus lentelėje | ❌ | Paprastos programos, vietinė DB |
| UUID v4 | 16 baitų | Praktiškai neįmanoma | ❌ | Paskirstytos sistemos, API |
| UUID v7 | 16 baitų | Praktiškai neįmanoma | ✅ | Moderni DB su našumu |
| ULID | 16 baitų | Praktiškai neįmanoma | ✅ | UUID + leksikografinis rūšiavimas |
| Snowflake ID | 8 baitai | Garantuotai unikalus teisingai sukonfigūravus | ✅ | Twitter, paskirstytos sistemos |
| NanoID | Konfigūruojama | Priklauso nuo ilgio | ❌ | URL-draugiški ID |

## Įdiegimas skirtingomis kalbomis

### JavaScript/TypeScript

```
// UUID v4 - Paprasčiausias būdas (modernios naršyklės)
const uuid = crypto.randomUUID();

// UUID v4 - Rankinis įdiegimas
function generateUUIDv4() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

// UUID v7 - Rekomenduojama duomenų bazėms
function generateUUIDv7() {
  const timestamp = Date.now();
  const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
  const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');

  const randomBytes = crypto.getRandomValues(new Uint8Array(10));
  const randomHex = Array.from(randomBytes)
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');

  return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}
```

### Python

```
import uuid

# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'

# UUID v1
uuid_v1 = str(uuid.uuid1())
```

### Java

```
import java.util.UUID;

// UUID v4
String uuidV4 = UUID.randomUUID().toString();
```

### PHP

```
// UUID v4 (PHP 7+)
function generateUUID() {
    return 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)
    );
}
```

### C#

```
using System;

// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();
```

## Geroji praktika

### UUID saugojimas duomenų bazėje

**PostgreSQL:**

```
CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);
```

**MySQL 8.0+:**

```
CREATE TABLE users (
    id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
```

**Patarimas:** MySQL atveju UUID saugokite kaip `BINARY(16)` vietoj `CHAR(36)`, kad sutaupytumėte vietos ir pagreitintumėte indeksavimą.

### UUID patvirtinimas

```
function isValidUUID(uuid) {
  const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return regex.test(uuid);
}
```

### UUID konvertavimas

```
// Brūkšnelių pašalinimas
const compact = uuid.replace(/-/g, '');

// Brūkšnelių pridėjimas atgal
function formatUUID(compactUuid) {
  return [
    compactUuid.substring(0, 8),
    compactUuid.substring(8, 12),
    compactUuid.substring(12, 16),
    compactUuid.substring(16, 20),
    compactUuid.substring(20, 32)
  ].join('-');
}
```

## Problemų sprendimas (Troubleshooting)

### UUID v3/v5 neveikia

**Problema:** Pasirinkus v3 arba v5, niekas nesugeneruojama

**Sprendimas:**

1. ✅ Patikrinkite, ar **užpildėte „Pavadinimo“ laukelį** – jis yra privalomas!
2. ✅ Pasirinkite tinkamą vardų sritį pagal savo įvesties tipą
3. ✅ Tinkamų įvesčių pavyzdžiai:
   - DNS: `example.com`, `google.com`
   - URL: `https://example.com/page`
   - Bet koks tekstas: `mano-programa-v1`

**Patarimas:** Pirmiausia pabandykite paprastą reikšmę, pvz., `test`, ir DNS vardų sritį.

### Laiku pagrįstas UUID (v1, v6, v7) turi keistą laiką

**Problema:** Sugeneruotas UUID turi netikėtą laiko žymą

**Sprendimas:**

1. ✅ Patikrinkite datos ir laiko parinkiklį – ar nustatytas teisingas laikas?
2. ✅ Datos ir laiko parinkiklis naudoja jūsų vietinę laiko juostą
3. ✅ Palikite datos ir laiko parinkiklį tuščią, kad būtų nustatytas dabartinis laikas

### UUID negalima nukopijuoti

**Problema:** Mygtukas „Kopijuoti viską“ neveikia

**Sprendimas:**

1. ✅ Patikrinkite, ar sugeneravote UUID (jie nėra tušti)
2. ✅ Kai kurioms naršyklėms reikalingas HTTPS, kad veiktų iškarpinės API
3. ✅ Alternatyviai pasirinkite tekstą teksto laukelyje ir nukopijuokite rankiniu būdu (Ctrl+C)

## Dažnai užduodami klausimai (DUK)

### Ar gali įvykti UUID kolizija?

Teoriškai taip, bet tikimybė yra astronomiškai maža. Generuojant 1 milijardą UUID v4 per sekundę 100 metų, kolizijos tikimybė yra maždaug 0,00000006%. Praktiškai kolizija niekada neįvyks.

### Ar UUID tinka kaip pirminis raktas duomenų bazėje?

Priklauso nuo naudojimo atvejo. UUID idealiai tinka paskirstytoms sistemoms ir situacijoms, kai reikalingas globalus unikalumas. Paprastoms programoms su viena duomenų baze automatinis didinimas gali būti efektyvesnis.

### Ar šiuo įrankiu sugeneruoti UUID yra saugūs?

Taip, mes naudojame „Web Crypto API“ (\`crypto.getRandomValues()\`), kuris suteikia kriptografiškai saugias atsitiktines vertes. Viskas vyksta lokaliai jūsų naršyklėje.

### Kuo skiriasi UUID versijos?

\- \*\*v1\*\*: Laiko žyma + MAC/atsitiktinis – chronologinis rūšiavimas, blogesnis DB našumas - \*\*v3/v5\*\*: Maišavimu pagrįstas – deterministinis, žinomų identifikatorių konvertavimui - \*\*v4\*\*: Atsitiktinis – saugiausias, dažniausiai naudojamas - \*\*v6\*\*: Perskirstyta laiko žyma – geresnis DB našumas nei v1 - \*\*v7\*\*: Unix laiko žyma – geriausias DB našumas + laiko rūšiavimas

### Kurią UUID versiją turėčiau naudoti?

Daugeliu atvejų naudokite \*\*v4\*\* (atsitiktinis). Duomenų bazėms su laiko rūšiavimu naudokite \*\*v7\*\* (moderni) arba \*\*v6\*\* (standartas). Žinomų identifikatorių (URL, DNS) konvertavimui naudokite \*\*v5\*\* (SHA-1).

### Ar galiu naudoti UUID prieigos raktams ir API raktams?

UUID v4 tinka sesijos ID ir panašiems prieigos raktams. API raktams apsvarstykite ilgesnių atsitiktinių eilučių (pvz., 256 bitų verčių) arba specializuotų bibliotekų naudojimą.

### Koks yra UUID dydis?

UUID yra 128 bitų (16 baitų). Kaip eilutės formatas su brūkšneliais jis užima 36 simbolius. Be brūkšnelių – 32 šešioliktainiai simboliai.

## UUID alternatyvos

### ULID (Universally Unique Lexicographically Sortable Identifier)

- 128 bitų ID (tas pats kaip UUID)
- Leksikografiškai rūšiuojamas pagal sukūrimo laiką
- Kompaktiškesnis atvaizdavimas (26 simboliai vietoj 36)
- Nepaisantis didžiųjų/mažųjų raidžių base32 kodavimas

**Pavyzdys:** `01ARZ3NDEKTSV4RRFFQ69G5FAV`

### NanoID

- Mažesnis dydis nei UUID (standartiškai 21 simbolis)
- URL draugiškas (be specialių simbolių)
- Greitesnis generavimas
- Konfigūruojamas ilgis ir abėcėlė

**Pavyzdys:** `V1StGXR8_Z5jdHi6B-myT`

### Snowflake ID (Twitter)

- 64 bitų ID (mažesnis nei UUID)
- Laiko atžvilgiu rūšiuojamas
- Yra darbuotojo ID ir sekos numeris
- Reikalinga centralizuota konfigūracija

**Pavyzdys:** `1234567890123456789`

## Našumas ir optimizavimas

### Generavimo greitis

Mūsų generatorius gali sugeneruoti:

- **1 UUID:** < 1 ms
- **100 UUID:** ~10-20 ms
- **1000 UUID:** ~100-200 ms

### Našumo patarimai

1. **Paketinis generavimas** – Jei reikia daug UUID, generuokite juos iš karto, o ne po vieną
2. **Saugoti DB** – Indeksuokite UUID stulpelius greitai paieškai
3. **Suspaudimas** – Saugokite UUID dvejetainiu pavidalu (16 baitų) vietoj eilutės (36 baitai)
4. **Talpyklos naudojimas** – Kai kuriais atvejais galite iš anksto sugeneruoti ir saugoti UUID talpykloje

## Kūrėjams

### UUID v4 struktūra

```
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 atsitiktinių duomenų bitai (mazgas)
|        |    |    └────── 16 atsitiktinių duomenų bitų su variantu (laikrodžio_seka)
|        |    └─────────── 12 atsitiktinių duomenų bitų + 4 versijos bitai (laikas_aukštai_ir_versija)
|        └──────────────── 16 atsitiktinių duomenų bitų (laikas_vidury)
└───────────────────────── 32 atsitiktinių duomenų bitai (laikas_žemiau)
```

- Versija (4 bitai): visada `0100` (dvejetainis) = `4` (šešioliktainis)
- Variantas (2-3 bitai): visada `10` (dvejetainis) pagal RFC 4122

### UUID testavimas

```
// Jest test
describe('UUID Generator', () => {
  test('generates valid UUID v4', () => {
    const uuid = generateUUIDv4();
    const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    expect(regex.test(uuid)).toBe(true);
  });

  test('generates unique UUIDs', () => {
    const uuid1 = generateUUIDv4();
    const uuid2 = generateUUIDv4();
    expect(uuid1).not.toBe(uuid2);
  });
});
```

## Saugumo aspektai

### Ko negalima daryti su UUID

❌ **Nenaudokite UUID v1 jautrioms programoms** – Jame yra laiko žyma, kuri gali kelti saugumo riziką

❌ **Nenaudokite `Math.random()` UUID generavimui** – Jis nėra kriptografiškai saugus

❌ **Nepasikliaukite UUID autorizavimui** – UUID galima atspėti (nors su itin maža tikimybe)

❌ **Nesaugokite UUID slapukuose be šifravimo** – Naudokite pasirašytus slapukus arba JWT

### Ką daryti

✅ **Daugeliu atvejų naudokite UUID v4** – Didžiausia entropija ir saugumas

✅ **Sujunkite UUID su kitomis saugumo priemonėmis** – Sesijos valdymui naudokite HTTPS, HttpOnly slapukus ir trumpą galiojimo laiką

✅ **Patvirtinkite UUID serveryje** – Visada patikrinkite UUID formatą ir versiją

✅ **Naudokite kriptografiškai saugius atsitiktinumo šaltinius** – `crypto.getRandomValues()` naršyklėje, `/dev/urandom` Linux’e

## Įdomūs faktai

- **Galimų UUID v4 skaičius:** 2^122 ≈ 5.3 × 10^36 (340 undecilijonų)
- **Reikalinga kolizija:** 50% tikimybei susidurti turite sugeneruoti 2.71 × 10^18 UUID (2.71 kvintilijonų)
- **Visų galimų UUID dydis:** Jei kiekvieną UUID saugotume kaip 16 baitų, visa erdvė užimtų 85 zettabaitus (85 milijardus terabaitų)
- **Kilmė:** UUID buvo standartizuotas kaip DCE (Distributed Computing Environment) dalis 1990 m.

## Other languages

- Čeština (cs): [Generátor UUID](https://acrafto.com/cs/generator-uuid/) ([Markdown](https://acrafto.com/cs/generator-uuid/index.md))
- Slovenčina (sk): [UUID generátor](https://acrafto.com/sk/generator-uuid/) ([Markdown](https://acrafto.com/sk/generator-uuid/index.md))
- English (en): [UUID Generator](https://acrafto.com/en/uuid-generator/) ([Markdown](https://acrafto.com/en/uuid-generator/index.md))
- Deutsch (de): [UUID Generator](https://acrafto.com/de/uuid-generator/) ([Markdown](https://acrafto.com/de/uuid-generator/index.md))
- Français (fr): [Générateur UUID](https://acrafto.com/fr/generateur-uuid/) ([Markdown](https://acrafto.com/fr/generateur-uuid/index.md))
- Español (es): [Generador de UUID](https://acrafto.com/es/generador-uuid/) ([Markdown](https://acrafto.com/es/generador-uuid/index.md))
- Italiano (it): [Generatore UUID](https://acrafto.com/it/generatore-uuid/) ([Markdown](https://acrafto.com/it/generatore-uuid/index.md))
- Português (pt): [Gerador de UUID](https://acrafto.com/pt/gerador-uuid/) ([Markdown](https://acrafto.com/pt/gerador-uuid/index.md))
- Nederlands (nl): [UUID generator](https://acrafto.com/nl/uuid-generator/) ([Markdown](https://acrafto.com/nl/uuid-generator/index.md))
- Polski (pl): [Generator UUID](https://acrafto.com/pl/generator-uuid/) ([Markdown](https://acrafto.com/pl/generator-uuid/index.md))
- Română (ro): [Generator UUID](https://acrafto.com/ro/generator-uuid/) ([Markdown](https://acrafto.com/ro/generator-uuid/index.md))
- Magyar (hu): [UUID generátor](https://acrafto.com/hu/uuid-generator/) ([Markdown](https://acrafto.com/hu/uuid-generator/index.md))
- Ελληνικά (el): [Γεννήτρια UUID](https://acrafto.com/el/gennitria-uuid/) ([Markdown](https://acrafto.com/el/gennitria-uuid/index.md))
- Български (bg): [UUID генератор](https://acrafto.com/bg/uuid-generator/) ([Markdown](https://acrafto.com/bg/uuid-generator/index.md))
- Hrvatski (hr): [Generator UUID](https://acrafto.com/hr/generator-uuid/) ([Markdown](https://acrafto.com/hr/generator-uuid/index.md))
- Slovenščina (sl): [UUID generator](https://acrafto.com/sl/generator-uuid/) ([Markdown](https://acrafto.com/sl/generator-uuid/index.md))
- Eesti (et): [UUID generaator](https://acrafto.com/et/uuid-generaator/) ([Markdown](https://acrafto.com/et/uuid-generaator/index.md))
- Latviešu (lv): [UUID ģenerators](https://acrafto.com/lv/uuid-generator/) ([Markdown](https://acrafto.com/lv/uuid-generator/index.md))
- Svenska (sv): [UUID-generator](https://acrafto.com/sv/uuid-generator/) ([Markdown](https://acrafto.com/sv/uuid-generator/index.md))
- Dansk (da): [UUID generator](https://acrafto.com/da/uuid-generator/) ([Markdown](https://acrafto.com/da/uuid-generator/index.md))
- Suomi (fi): [UUID-generaattori](https://acrafto.com/fi/uuid-generaattori/) ([Markdown](https://acrafto.com/fi/uuid-generaattori/index.md))
- Norsk (no): [UUID-generator](https://acrafto.com/no/uuid-generator/) ([Markdown](https://acrafto.com/no/uuid-generator/index.md))
- Українська (uk): [Генератор UUID](https://acrafto.com/uk/henerator-uuid/) ([Markdown](https://acrafto.com/uk/henerator-uuid/index.md))
- Русский (ru): [Генератор UUID](https://acrafto.com/ru/generator-uuid/) ([Markdown](https://acrafto.com/ru/generator-uuid/index.md))
- Српски (sr): [UUID generator](https://acrafto.com/sr/uuid-generator/) ([Markdown](https://acrafto.com/sr/uuid-generator/index.md))
- Македонски (mk): [UUID генератор](https://acrafto.com/mk/uuid-generator/) ([Markdown](https://acrafto.com/mk/uuid-generator/index.md))
- Bosanski (bs): [Generator UUID-a](https://acrafto.com/bs/generator-uuid/) ([Markdown](https://acrafto.com/bs/generator-uuid/index.md))
- Shqip (sq): [Gjenerator UUID](https://acrafto.com/sq/gjenerator-uuid/) ([Markdown](https://acrafto.com/sq/gjenerator-uuid/index.md))
- Türkçe (tr): [UUID oluşturucu](https://acrafto.com/tr/uuid-uretici/) ([Markdown](https://acrafto.com/tr/uuid-uretici/index.md))
- 日本語 (ja): [UUID生成ツール](https://acrafto.com/ja/uuid-generator/) ([Markdown](https://acrafto.com/ja/uuid-generator/index.md))
- 한국어 (ko): [UUID 생성기](https://acrafto.com/ko/uuid-generator/) ([Markdown](https://acrafto.com/ko/uuid-generator/index.md))
- العربية (ar): [مولد UUID](https://acrafto.com/ar/uuid-generator/) ([Markdown](https://acrafto.com/ar/uuid-generator/index.md))
- हिन्दी (hi): [UUID जनरेटर](https://acrafto.com/hi/uuid-generator/) ([Markdown](https://acrafto.com/hi/uuid-generator/index.md))
- Bahasa Indonesia (id): [Generator UUID](https://acrafto.com/id/generator-uuid/) ([Markdown](https://acrafto.com/id/generator-uuid/index.md))
- Tiếng Việt (vi): [Trình tạo UUID](https://acrafto.com/vi/uuid-generator/) ([Markdown](https://acrafto.com/vi/uuid-generator/index.md))
- ไทย (th): [สร้าง UUID](https://acrafto.com/th/uuid-generator/) ([Markdown](https://acrafto.com/th/uuid-generator/index.md))
- עברית (he): [מחולל UUID](https://acrafto.com/he/uuid-generator/) ([Markdown](https://acrafto.com/he/uuid-generator/index.md))
