# UUID generaator

> Looge tasuta UUID-sid (unikaalseid identifikaatoreid) veebis. Toetab kõiki versioone (v1, v3-v7) ja korraga tuhandete UUID-de loomist.

URL: https://acrafto.com/et/uuid-generaator/

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.

## Mis on UUID?

UUID (Universally Unique Identifier) on 128-bitine identifikaator, mida kasutatakse arvutisüsteemides teabe unikaalseks identifitseerimiseks. UUID on standardiseeritud vastavalt RFC 4122-le ja tänu oma tohutule entroopiale garanteerib praktiliselt nullilähedase kokkupõrke tõenäosuse – see tähendab, et kaks iseseisvalt genereeritud UUID-d on peaaegu kindlasti unikaalsed.

UUID-l on standardvorming: `xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx`, kus iga `x` on kuueteistkümnendsüsteemi number (0-9, a-f), `M` tähistab UUID versiooni ja `N` tähistab varianti.

## UUID versioonid

### UUID v1 (Ajatempel + MAC-aadress)

UUID v1 põhineb praegusel ajatemplil ja juhuslikul väärtusel (brauseris MAC-aadressi asemel). See kasutab 100-nanosekundilisi intervalle alates 15. oktoobrist 1582 (Gregoriuse kalender).

**Kasutamine:**

- Olukorrad, kus on vaja UUID-de kronoloogilist järjestamist
- Silumine ja logimine (UUID sisaldab teavet loomise aja kohta)
- Hajutatud süsteemid aja sünkroonimisega

**Näide:** `6ba7b810-9dad-11d1-80b4-00c04fd430c8`

**Eelised:**

- UUID-sid saab kronoloogiliselt järjestada vastavalt loomise ajale
- Kasulik auditeerimisel ja silumisel
- Sisaldab ajatempli infot

**Puudused:**

- Potentsiaalne turvarisk – sisaldab ajatempli
- Brauseris ei sisalda tegelikku MAC-aadressi (asendatud juhusliku väärtusega)
- Halb andmebaasi lokaliteet (ajatempel on madalama järgu bittides)

### UUID v3 (MD5 räsikood)

UUID v3 genereeritakse, kasutades MD5 räsi nimeruumi UUID-st ja nimest. Deterministlik – sama nimeruum + nimi loovad alati sama UUID.

**Kasutamine:**

- URL-ide, DNS-nimede või muude identifikaatorite teisendamine UUID-deks
- Olukorrad, kus on vaja reprodutseeritavat UUID-d
- Kaardistamine erinevate identifitseerimissüsteemide vahel

**Näide:** `a3bb189e-8bf9-3888-9912-ace4e6543002`

**Eelised:**

- Deterministlik (sama sisend = sama väljund)
- Ideaalne teadaolevate identifikaatorite teisendamiseks
- Erinevate sisendite puhul kokkupõrked puuduvad

**Puudused:**

- MD5 on aegunud algoritm (eelistage v5)
- Nõuab nimeruumi ja nime
- Algset sisendit ei saa tagasi saada

### UUID v4 (Juhuslik) - SOOVITATAV

Kõige sagedamini kasutatav UUID versioon. UUID v4 genereeritakse täiesti juhuslikult, kasutades krüptograafiliselt turvalist juhuslike numbrite generaatorit (`crypto.getRandomValues()`).

**Kasutamine:**

- Andmebaasi primaarvõtmed
- Seansi identifikaatorid (session IDs)
- Unikaalsed failinimed
- API tokenid
- Üldotstarbeline, kus on vaja garanteeritult unikaalset ID-d

**Näide:** `f47ac10b-58cc-4372-a567-0e02b2c3d479`

**Eelised:**

- Maksimaalne entroopia ja turvalisus
- Sõltumatus ajast või süsteemi parameetritest
- Lihtsam implementatsioon

**Kokkupõrke tõenäosus:** Genereerides 1 miljard UUID-d sekundis 100 aasta jooksul, on kokkupõrke tõenäosus umbes 0,00000006%.

### UUID v5 (SHA-1 räsikood)

UUID v5 on sama mis v3, kuid kasutab MD5 asemel SHA-1. Moodsam ja turvalisem alternatiiv v3-le.

**Kasutamine:**

- Sama mis v3, kuid parema turvalisusega
- Eelistatav v3-le uutes projektides
- UUID genereerimine URL-idest, DNS-nimedest, OID-st, X.500 DN-ist

**Näide:** `886313e1-3b8a-5372-9b90-0c9aee199e5d`

**Eelised:**

- Deterministlik
- SHA-1 on robustsem kui MD5
- Sobib süsteemide vaheliseks kaardistamiseks

**Puudused:**

- SHA-1 loetakse samuti aegunuks (kuid siiski turvalisem kui MD5)
- Nõuab nimeruumi ja nime

### UUID v6 (Sorteeritav ajatempel)

UUID v6 on v1 täiustatud versioon ümberkorraldatud ajabittidega parema andmebaasi indekseerimise jaoks. Loodud andmebaaside lokaliteediprobleemide lahendamiseks.

**Kasutamine:**

- Andmebaasi primaarvõtmed aja järgi järjestamisega
- Süsteemid, mis nõuavad nii kronoloogilist järjestamist kui ka andmebaasi jõudlust
- Moodsam alternatiiv v1-le

**Näide:** `1ec9414c-232a-6b00-b3c8-9e6bdeced846`

**Eelised:**

- Parem andmebaasi lokaliteet kui v1 (ajatempel on kõrgema järgu bittides)
- Kronoloogiline järjestamine
- Ühildub UUID standardiga

**Puudused:**

- Vähem kasutatav kui v1/v4
- Sisaldab endiselt ajalist teavet (turvarisk)

### UUID v7 (Unix ajatempel)

UUID v7 kasutab Unix ajatempli (millisekundid alates 1970) + juhuslikke bitte. Uusim UUID versioon parima andmebaasi lokaliteediga.

**Kasutamine:**

- Kaasaegsed andmebaasi primaarvõtmed
- Süsteemid, mis nõuavad jõudlust + aja järgi järjestamist
- v1/v6 asendaja uutes projektides

**Näide:** `017f22e2-79b0-7cc3-98c4-dc0c0c07398f`

**Eelised:**

- Kõigist versioonidest parim andmebaasi lokaliteet
- Unix ajatempel on standardne
- Ühendab juhuslikkuse ja aja järgi järjestamise eelised

**Puudused:**

- Suhteliselt uus spetsifikatsioon (RFC 4122bis)
- Vähem toetatud vanades süsteemides

## Millist UUID versiooni kasutada?

### Otsustusjuhend

**Vajate maksimaalset turvalisust ja juhuslikkust?** → Kasutage **UUID v4** (kõige tavalisem valik)

**Vajate aja järgi järjestamist ja andmebaasi jõudlust?** → Kasutage **UUID v7** (moodne) või **UUID v6** (standard)

**Vajate reprodutseeritavat UUID-d olemasolevatest identifikaatoritest?** → Kasutage **UUID v5** (SHA-1) või **UUID v3** (MD5, pärand)

**Vajate ajatempli ja auditi jälgimist?** → Kasutage **UUID v1** (pärand, halvem andmebaasi jõudlus)

### Andmebaasid

**Uute projektide jaoks:** UUID v7 või v4

- **v7** on ideaalne aja järgi järjestamiseks + jõudluseks
- **v4** maksimaalse juhuslikkuse jaoks ilma ajateabeta

**Pärandsüsteemide jaoks:** UUID v1 või v6

- **v6**\-l on parem andmebaasi lokaliteet kui v1-l
- **v1** on laialdaselt toetatud

**UUID eelised primaarvõtmena:**

- **Globaalne unikaalsus** – Saate ühendada andmeid erinevatest andmebaasidest ilma konfliktita
- **Turvalisus** – Erinevalt järjestikustest ID-dest (1, 2, 3…) ei saa järgmisi väärtusi ära arvata
- **Hajutatud süsteemid** – UUID-sid saab genereerida iseseisvalt mitmel serveril ilma koordineerimiseta
- **Andmebaaside ühendamine** – Kahe andmebaasi ühendamisel ei teki konflikte

**Puudused:**

- Suurem suurus (16 baiti vs 4-8 baiti täisarvu jaoks)
- Mõnes andmebaasis aeglasem indekseerimine (parema jõudluse saamiseks kasutage v6/v7)
- Inimesele vähem loetav

### API ja veebiteenused

- **REST API** – Unikaalsed identifikaatorid ressurssidele
- **GraphQL** – Globaalsed identifikaatorid sõlmedele
- **Webhookid** – Päringute ja vastuste jälgimine
- **Tokenid** – Seansi ID-d, värskendustokenid

### Failid ja salvestusruum

- **Failinimed** – Kokkupõrgete vältimine üleslaadimisel
- **S3/Pilvsalvestus** – Unikaalsed teed objektidele
- **Vahemälu võtmed** – Identifikaatorid vahemälu süsteemides

### Esirakendused (Frontend-rakendused)

- **React/Vue komponendid** – Unikaalsed võtmed loendite jaoks
- **Ajutised ID-d** – ID-d enne andmebaasi salvestamist
- **Kohalik salvestusruum** – Võtmed salvestatud andmetele
- **Võrguühenduseta rakendused** – ID-de genereerimine ilma serveriühenduseta

## Generaatori täpsemad funktsioonid

### UUID genereerimine kohandatud ajaga

Ajapõhiste versioonide (v1, v6, v7) puhul saate kasutada kuupäeva-aja valijat suvalise ajatempli valimiseks. See on kasulik järgmiste jaoks:

**Testimine:**

- Varem loodud UUID-de simuleerimine
- Aja järgi järjestamise testimine andmebaasides
- UUID-de reprodutseerimine silumiseks

**Andmete migreerimine:**

- UUID-de genereerimine ajalooliste ajatemplitega
- Andmete täitmine korrektsete ajatempli väärtustega
- Andmete importimine erinevatest ajavahemikest

**Audit ja vastavus:**

- UUID-de rekonstrueerimine vastavalt kirje loomise ajale
- Identifikaatorite retrospektiivne genereerimine

**Kasutusnäide:**

1. Valige versioon v1, v6 või v7
2. Määrake kuupäev ja kellaaeg kuupäeva-aja valija abil
3. Genereerige UUID oma kohandatud ajatempliga

### Räsipõhine UUID (v3, v5)

Deterministlike UUID-de jaoks saate kasutada versioone v3 (MD5) või v5 (SHA-1):

**Kuidas kasutada:**

1. Valige nimeruum vastavalt oma identifikaatori tüübile
2. Sisestage nimi/väärtus
3. Genereerige UUID

**Näited:**

| Nimeruum | Nimi (sisestus) | Kasutamine |
| --- | --- | --- |
| DNS | `example.com` | Domeeninime teisendamine UUID-ks |
| DNS | `google.com` | Igal veebisaidil on unikaalne UUID |
| URL | `https://example.com/page` | URL-i teisendamine UUID-ks |
| URL | `https://api.example.com/users/123` | API lõpp-punkt UUID-na |
| OID | `1.3.6.1.4.1.343` | Objekti identifikaator UUID-ks |
| X.500 | `CN=John Doe,O=Company` | Distinguished Name UUID-ks |

**Olulised omadused:**

- ✅ **Deterministlik**: Sama sisend = alati sama UUID
- ✅ **Reprodutseeritav**: UUID-d saab igal ajal uuesti luua
- ✅ **Järjepidev**: Sama UUID erinevates süsteemides
- ❌ **Ei saa dekodeerida**: Algset nime ei saa UUID-st tagasi saada
- ℹ️ **Üks UUID**: v3/v5 puhul genereeritakse alati ainult üks UUID (sama sisend = sama väljund)

**Praktiline kasutamine:**

```
// Näide: URL-i teisendamine UUID v5-ks
Namespace: URL
Nimi: https://example.com/api/users/123
Tulemus: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// Sama sisend = alati sama UUID
Namespace: DNS
Nimi: google.com
Tulemus: alati sama UUID google.com jaoks
```

## Kuidas UUID-d turvaliselt kasutada?

### Krüptograafiline turvalisus

Meie generaator kasutab `crypto.getRandomValues()`, mis on krüptograafiliselt turvaline juhuslike numbrite generaator. Erinevalt `Math.random()`\-st, mis on ettearvatav ja turvalisuse eesmärkidel sobimatu, pakub `crypto.getRandomValues()` tõelist entroopiat, mis sobib järgmiste jaoks:

- Turvatokenite genereerimine
- Seansi ID-d
- API võtmed
- Krüptograafilised rakendused

### UUID versioonide võrdlus

| Versioon | Põhi | Kokkupõrge | Ajaline järjestus | DB jõudlus | Kasutus |
| --- | --- | --- | --- | --- | --- |
| v1 | Ajatempel + MAC | Madal | ✅ Jah | ❌ Halvem | Pärand, audit |
| v3 | MD5 räsi | Puudub (deterministlik) | ❌ Ei | ⚠️ Keskmine | Teisendused (pärand) |
| v4 | Juhuslik | Äärmiselt madal | ❌ Ei | ⚠️ Keskmine | Üldotstarbeline |
| v5 | SHA-1 räsi | Puudub (deterministlik) | ❌ Ei | ⚠️ Keskmine | Teisendused (soovitatav) |
| v6 | Sorteeritud ajatempel | Madal | ✅ Jah | ✅ Parem | Moodne DB ajaga |
| v7 | Unix ajatempel | Madal | ✅ Jah | ✅ Parim | Uued projektid |

### UUID vs muud identifikaatorid

| Tüüp | Suurus | Kokkupõrge | Ajaline järjestus | Kasutus |
| --- | --- | --- | --- | --- |
| Auto-increment ID | 4-8 baiti | Garanteeritult unikaalne tabelis | ❌ | Lihtsad rakendused, kohalik DB |
| UUID v4 | 16 baiti | Praktiliselt võimatu | ❌ | Hajutatud süsteemid, API |
| UUID v7 | 16 baiti | Praktiliselt võimatu | ✅ | Moodne DB jõudlusega |
| ULID | 16 baiti | Praktiliselt võimatu | ✅ | UUID + leksikograafiline järjestamine |
| Snowflake ID | 8 baiti | Garanteeritult unikaalne õigel konfiguratsioonil | ✅ | Twitter, hajutatud süsteemid |
| NanoID | Konfigureeritav | Sõltub pikkusest | ❌ | URL-sõbralikud ID-d |

## Rakendamine erinevates keeltes

### JavaScript/TypeScript

```
// UUID v4 - Lihtsaim viis (kaasaegsed brauserid)
const uuid = crypto.randomUUID();

// UUID v4 - Käsitsi implementatsioon
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 - Soovitatav andmebaasidele
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();
```

## Parimad praktikad

### UUID salvestamine andmebaasi

**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
);
```

**Nõuanne:** MySQL-is salvestage UUID-d `BINARY(16)` tüübina `CHAR(36)` asemel, et säästa ruumi ja kiirendada indekseerimist.

### UUID valideerimine

```
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 teisendamine

```
// Kriipsude eemaldamine
const compact = uuid.replace(/-/g, '');

// Kriipsude tagasi lisamine
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('-');
}
```

## Probleemide lahendamine (Troubleshooting)

### UUID v3/v5 ei tööta

**Probleem:** Pärast v3 või v5 valimist midagi ei genereerita

**Lahendus:**

1. ✅ Kontrollige, et olete **täitnud välja “Nimi”** – see on kohustuslik!
2. ✅ Valige õige nimeruum vastavalt oma sisendi tüübile
3. ✅ Näited kehtivatest sisenditest:
   - DNS: `example.com`, `google.com`
   - URL: `https://example.com/page`
   - Mis tahes tekst: `minu-rakendus-v1`

**Nõuanne:** Proovige kõigepealt lihtsat väärtust nagu `test` ja nimeruumi DNS.

### Ajaline UUID (v1, v6, v7) näitab kummalist aega

**Probleem:** Genereeritud UUID-l on ootamatu ajatempel

**Lahendus:**

1. ✅ Kontrollige kuupäeva-aja valijat – kas on määratud õige aeg?
2. ✅ Kuupäeva-aja valija kasutab teie kohalikku ajavööndit
3. ✅ Praeguse aja jaoks jätke kuupäeva-aja valija tühjaks

### UUID-d ei saa kopeerida

**Probleem:** Nupp “Kopeeri kõik” ei tööta

**Lahendus:**

1. ✅ Kontrollige, et olete genereerinud UUID-d (need ei ole tühjad)
2. ✅ Mõned brauserid nõuavad lõikepuhvri API jaoks HTTPS-i
3. ✅ Alternatiivina valige tekst tekstialast ja kopeerige käsitsi (Ctrl+C)

## Korduma kippuvad küsimused (KKK)

### Kas UUID kokkupõrge on võimalik?

Teoreetiliselt jah, kuid tõenäosus on astronoomiliselt väike. Genereerides 1 miljard UUID v4 sekundis 100 aasta jooksul, on kokkupõrke tõenäosus umbes 0,00000006%. Praktikas kokkupõrget kunagi ei juhtu.

### Kas UUID sobib andmebaasi primaarvõtmeks?

See sõltub kasutusjuhtumist. UUID on ideaalne hajutatud süsteemide ja olukordade jaoks, kus on vaja globaalset unikaalsust. Lihtsate rakenduste jaoks, millel on üks andmebaas, võib auto-increment olla tõhusam.

### Kas selle tööriistaga genereeritud UUID-d on turvalised?

Jah, me kasutame Web Crypto API-t (\`crypto.getRandomValues()\`), mis pakub krüptograafiliselt turvalisi juhuslikke väärtusi. Kõik toimub lokaalselt teie brauseris.

### Mis vahe on UUID versioonidel?

\- \*\*v1\*\*: Ajatempel + MAC/juhuslik – kronoloogiline järjestamine, halvem DB jõudlus - \*\*v3/v5\*\*: Räsipõhine – deterministlik, teadaolevate identifikaatorite teisendamiseks - \*\*v4\*\*: Juhuslik – kõige turvalisem, kõige sagedamini kasutatav - \*\*v6\*\*: Ümberkorraldatud ajatempel – parem DB jõudlus kui v1 - \*\*v7\*\*: Unix ajatempel – parim DB jõudlus + ajaline järjestamine

### Millist UUID versiooni peaksin kasutama?

Enamikus juhtudes kasutage \*\*v4\*\* (juhuslik). Ajalise järjestusega andmebaaside jaoks kasutage \*\*v7\*\* (moodne) või \*\*v6\*\* (standard). Teadaolevate identifikaatorite (URL, DNS) teisendamiseks kasutage \*\*v5\*\* (SHA-1).

### Kas ma saan UUID-d kasutada tokenite ja API-võtmete jaoks?

UUID v4 sobib seansi ID-de ja sarnaste tokenite jaoks. API-võtmete jaoks kaaluge pikemate juhuslike stringide (nt 256-bitiste väärtuste) või spetsiaalsete teekide kasutamist.

### Kui suured on UUID-d?

UUID on 128 bitti (16 baiti). Kriipsudega stringivormingus võtab see 36 märki. Ilma kriipsudeta 32 kuueteistkümnendsüsteemi märki.

## UUID alternatiivid

### ULID (Universally Unique Lexicographically Sortable Identifier)

- 128-bitine ID (sama mis UUID)
- Leksikograafiliselt sorditav vastavalt loomise ajale
- Kompaktsem esitus (26 märki 36 asemel)
- Tõstutundetu base32 kodeering

**Näide:** `01ARZ3NDEKTSV4RRFFQ69G5FAV`

### NanoID

- Väiksem suurus kui UUID (standardina 21 märki)
- URL-sõbralik (ilma erimärkideta)
- Kiirem genereerimine
- Konfigureeritav pikkus ja tähestik

**Näide:** `V1StGXR8_Z5jdHi6B-myT`

### Snowflake ID (Twitter)

- 64-bitine ID (väiksem kui UUID)
- Ajaliselt sorditav
- Sisaldab töölise ID-d ja järjestuse numbrit
- Nõuab tsentraliseeritud konfiguratsiooni

**Näide:** `1234567890123456789`

## Jõudlus ja optimeerimine

### Genereerimiskiirus

Meie generaator suudab genereerida:

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

### Jõudluse näpunäited

1. **Partii genereerimine** – Kui vajate palju UUID-sid, genereerige need korraga, mitte ükshaaval
2. **Salvestamine andmebaasi** – Indekseerige UUID veerud kiireks otsinguks
3. **Kompimine** – Salvestage UUID-d binaarkujul (16 baiti) stringi (36 baiti) asemel
4. **Vahemälu** – Mõnel juhul saate UUID-d eelnevalt genereerida ja vahemälustada

## Arendajatele

### UUID v4 struktuur

```
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 juhuslikku bitti (sõlm)
|        |    |    └────── 16 juhuslikku bitti variandiga (kella_järjestus)
|        |    └─────────── 12 juhuslikku bitti + 4 versiooni bitti (aeg_kõrge_ja_versioon)
|        └──────────────── 16 juhuslikku bitti (aeg_keskmine)
└───────────────────────── 32 juhuslikku bitti (aeg_madal)
```

- Versioon (4 bitti): alati `0100` (binaarselt) = `4` (heksadesimaalselt)
- Variant (2-3 bitti): alati `10` (binaarselt) RFC 4122 jaoks

### UUID testimine

```
// 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);
  });
});
```

## Turvalisuse aspektid

### Mida UUID-ga mitte teha

❌ **Ärge kasutage UUID v1 tundlike rakenduste jaoks** – Sisaldab ajatempli, mis võib olla turvarisk

❌ **Ärge kasutage `Math.random()` UUID-de genereerimiseks** – See ei ole krüptograafiliselt turvaline

❌ **Ärge toetuge UUID-le autoriseerimisel** – UUID-d on võimalik ära arvata (ehkki äärmiselt väikese tõenäosusega)

❌ **Ärge salvestage UUID-sid küpsistesse ilma krüpteerimiseta** – Kasutage signeeritud küpsiseid või JWT-d

### Mida teha

✅ **Kasutage enamikus juhtudes UUID v4** – Suurim entroopia ja turvalisus

✅ **Kombineerige UUID-d teiste turvameetmetega** – Seansihalduriks kasutage HTTPS-i, HttpOnly küpsiseid ja lühikest aegumist

✅ **Valideerige UUID-d serveris** – Kontrollige alati UUID vormingut ja versiooni

✅ **Kasutage krüptograafiliselt turvalisi juhuslikkuse allikaid** – `crypto.getRandomValues()` brauseris, `/dev/urandom` Linuxis

## Huvitavaid fakte

- **Võimalike UUID v4 arv:** 2^122 ≈ 5.3 × 10^36 (340 undecillionit)
- **Vajalik kokkupõrge:** 50% kokkupõrke tõenäosuse saavutamiseks peate genereerima 2.71 × 10^18 UUID-d (2.71 kvintillionit)
- **Kõigi võimalike UUID-de suurus:** Kui me salvestaksime iga UUID kui 16 baiti, hõlmaks kogu ruum 85 zettabaiti (85 miljardit terabaiti)
- **Päritolu:** UUID standardiseeriti osana DCE-st (Distributed Computing Environment) 1990. aastal

## 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))
- Latviešu (lv): [UUID ģenerators](https://acrafto.com/lv/uuid-generator/) ([Markdown](https://acrafto.com/lv/uuid-generator/index.md))
- Lietuvių (lt): [UUID generatorius](https://acrafto.com/lt/uuid-generatorius/) ([Markdown](https://acrafto.com/lt/uuid-generatorius/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))
