# UUID-generaattori

> Luo UUID-tunnisteita verkossa ilmaiseksi. Tukee kaikkia versioita (v1, v3-v7) ja tuhansien tunnisteiden generointia kerralla – suoraan selaimessa.

URL: https://acrafto.com/fi/uuid-generaattori/

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.

## Mikä on UUID?

UUID (Universally Unique Identifier) on 128-bittinen tunniste, jota käytetään tietojärjestelmissä tietojen yksilöimiseen. UUID on standardoitu RFC 4122 -standardin mukaisesti, ja sen valtava entropia takaa käytännössä nollakollisiotodennäköisyyden – tämä tarkoittaa, että kaksi itsenäisesti generoituja UUID:itä ovat lähes varmasti yksilöllisiä.

UUID:llä on vakiomuoto: `xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx`, missä jokainen `x` on heksadesimaaliluku (0-9, a-f), `M` osoittaa UUID:n version ja `N` osoittaa variantin.

## UUID-versiot

### UUID v1 (Aikaleima + MAC-osoite)

UUID v1 perustuu nykyiseen aikaleimaan ja satunnaiseen arvoon (selaimessa MAC-osoitteen sijaan). Se käyttää 100 nanosekunnin aikavälejä alkaen 15. lokakuuta 1582 (gregoriaaninen kalenteri).

**Käyttö:**

- Tilanteet, joissa tarvitaan UUID:n kronologista järjestystä
- Virheenkorjaus ja lokitus (UUID sisältää tiedon luontiajasta)
- Hajautetut järjestelmät aikataulun synkronoinnilla

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

**Edut:**

- UUID:t voidaan järjestää kronologisesti luomisajan mukaan
- Hyödyllinen auditoinnissa ja virheenkorjauksessa
- Sisältää aikaleimatiedon

**Haitat:**

- Mahdollinen tietoturvariski – sisältää aikaleiman
- Selaimessa ei sisällä todellista MAC-osoitetta (korvattu satunnaisella arvolla)
- Huono DB-lokaliteetti (aikaleima on matala-asteisissa biteissä)

### UUID v3 (MD5-tiiviste)

UUID v3 luodaan käyttämällä MD5-tiivistettä nimiavaruuden UUID:stä ja nimestä. Deterministinen – sama nimiavaruus + nimi luovat aina saman UUID:n.

**Käyttö:**

- URL-osoitteiden, DNS-nimien tai muiden tunnisteiden muuntaminen UUID:ksi
- Tilanteet, joissa tarvitaan toistettavissa olevaa UUID:tä
- Kartoitus eri tunnistusjärjestelmien välillä

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

**Edut:**

- Deterministinen (sama syöte = sama tuloste)
- Ihanteellinen tunnettujen tunnisteiden muuntamiseen
- Ei kollisiota eri syötteille

**Haitat:**

- MD5 on vanhentunut algoritmi (suosi v5:tä)
- Vaatii nimiavaruuden ja nimen
- Alkuperäistä syötettä ei voi palauttaa

### UUID v4 (Satunnainen) - SUOSITELTU

Yleisimmin käytetty UUID-versio. UUID v4 generoidaan puhtaasti satunnaisesti käyttämällä kryptografisesti turvallista satunnaislukugeneraattoria (`crypto.getRandomValues()`).

**Käyttö:**

- Tietokantojen perusavaimet
- Istunnon tunnisteet (session IDs)
- Yksilölliset tiedostonimet
- API-tunnukset
- Yleiskäyttö, kun tarvitaan taatusti yksilöllistä tunnusta

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

**Edut:**

- Suurin entropia ja turvallisuus
- Ei riippuvuutta ajasta tai järjestelmäparametreista
- Yksinkertaisin toteutus

**Kollisiotodennäköisyys:** Jos generoidaan miljardi UUID:tä sekunnissa 100 vuoden ajan, kollision todennäköisyys on noin 0,00000006%.

### UUID v5 (SHA-1-tiiviste)

UUID v5 on sama kuin v3, mutta se käyttää SHA-1:tä MD5:n sijaan. Nykyaikaisempi ja turvallisempi vaihtoehto v3:lle.

**Käyttö:**

- Sama kuin v3, mutta paremmalla turvallisuudella
- Suositeltavampi kuin v3 uusissa projekteissa
- UUID:n generointi URL-osoitteista, DNS-nimistä, OID:eistä, X.500 DN:istä

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

**Edut:**

- Deterministinen
- SHA-1 on vankempi kuin MD5
- Soveltuu järjestelmien väliseen kartoitukseen

**Haitat:**

- SHA-1:tä pidetään myös vanhentuneena (mutta silti turvallisempi kuin MD5)
- Vaatii nimiavaruuden ja nimen

### UUID v6 (Järjestetty aikaleima)

UUID v6 on parannettu versio v1:stä, jossa aikabittejä on järjestetty uudelleen paremman DB-indeksoinnin vuoksi. Suunniteltu ratkaisemaan lokaliteettiongelmia tietokannoissa.

**Käyttö:**

- Tietokantojen perusavaimet aikajärjestyksellä
- Järjestelmät, jotka vaativat kronologista järjestystä ja DB-suorituskykyä
- Nykyaikaisempi vaihtoehto v1:lle

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

**Edut:**

- Parempi DB-lokaliteetti kuin v1 (aikaleima korkea-asteisissa biteissä)
- Kronologinen järjestys
- Yhteensopiva UUID-standardin kanssa

**Haitat:**

- Harvemmin käytetty kuin v1/v4
- Sisältää edelleen aikatietoja (tietoturvariski)

### UUID v7 (Unix-aikaleima)

UUID v7 käyttää Unix-aikaleimaa (millisekunteina vuodesta 1970) + satunnaisia bittejä. Uusin UUID-versio parhaalla DB-lokaliteetilla.

**Käyttö:**

- Nykyaikaiset tietokantojen perusavaimet
- Järjestelmät, jotka vaativat suorituskykyä + aikajärjestystä
- Korvaaja v1/v6:lle uusissa projekteissa

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

**Edut:**

- Paras DB-lokaliteetti kaikista versioista
- Unix-aikaleima on standardi
- Yhdistää satunnaisuuden ja aikajärjestyksen edut

**Haitat:**

- Suhteellisen uusi spesifikaatio (RFC 4122bis)
- Vähemmän tuettu vanhemmissa järjestelmissä

## Mikä UUID-versio kannattaa valita?

### Päätösohje

**Tarvitsetko maksimaalista turvallisuutta ja satunnaisuutta?** → Käytä **UUID v4** (yleisin valinta)

**Tarvitsetko aikajärjestystä ja DB-suorituskykyä?** → Käytä **UUID v7** (moderni) tai **UUID v6** (standardi)

**Tarvitsetko toistettavissa olevia UUID:itä olemassa olevista tunnisteista?** → Käytä **UUID v5** (SHA-1) tai **UUID v3** (MD5, vanhentunut)

**Tarvitsetko aikaleiman ja auditointipolun?** → Käytä **UUID v1** (vanhentunut, heikompi DB-suorituskyky)

### Tietokannat

**Uusiin projekteihin:** UUID v7 tai v4

- **v7** on ihanteellinen aikajärjestykseen + suorituskykyyn
- **v4** maksimaaliseen satunnaisuuteen ilman aikatietoja

**Vanhoihin järjestelmiin:** UUID v1 tai v6

- **v6**:lla on parempi DB-lokaliteetti kuin v1:llä
- **v1** on laajasti tuettu

**UUID:n edut perusavaimena:**

- **Globaali yksilöllisyys** – Voit yhdistää tietoja eri tietokannoista ilman konflikteja
- **Turvallisuus** – Toisin kuin peräkkäisiä tunnuksia (1, 2, 3…) ei voi arvata seuraavia arvoja
- **Hajautetut järjestelmät** – UUID:itä voidaan generoida itsenäisesti useilla palvelimilla ilman koordinointia
- **Tietokantojen yhdistäminen** – Kahden tietokannan yhdistämisessä ei synny konflikteja

**Haitat:**

- Suurempi koko (16 tavua vs. 4-8 tavua kokonaisluvulle)
- Hitaampi indeksointi joissakin tietokannoissa (käytä v6/v7 parempaan suorituskykyyn)
- Vähemmän luettavissa ihmiselle

### API:t ja verkkopalvelut

- **REST API** – Yksilölliset tunnisteet resursseille
- **GraphQL** – Globaalit tunnisteet solmuille
- **Webhookit** – Pyyntöjen ja vastausten seuranta
- **Tunnukset** – Istunnon tunnisteet, päivitystunnukset

### Tiedostot ja tallennustilat

- **Tiedostonimet** – Kollision estäminen latauksen yhteydessä
- **S3/Pilvitallennus** – Yksilölliset polut objekteille
- **Välimuistin avaimet** – Tunnisteet välimuistijärjestelmissä

### Frontend-sovellukset

- **React/Vue-komponentit** – Yksilölliset avaimet listoille
- **Väliaikaiset tunnisteet** – Tunnisteet ennen tallennusta tietokantaan
- **Paikallinen tallennustila** – Avaimet tallennetuille tiedoille
- **Offline-first-sovellukset** – Tunnisteiden generointi ilman palvelinyhteyttä

## Generaattorin edistyneet toiminnot

### UUID:n generointi omalla ajalla

Aikaan perustuvissa versioissa (v1, v6, v7) voit valita minkä tahansa aikaleiman päivämäärä- ja aikavalitsimen avulla. Tämä on hyödyllistä:

**Testaukseen:**

- Menneisyydessä luotujen UUID:iden simulointi
- Aikajärjestyksen testaus tietokannoissa
- UUID:iden toistaminen virheenkorjausta varten

**Tietojen siirtoon:**

- UUID:iden generointi historiallisilla aikaleimoilla
- Tietojen täyttäminen oikeilla aikaleima-arvoilla
- Tietojen tuonti eri ajanjaksoilta

**Auditoinnin ja vaatimustenmukaisuuden varmistamiseen:**

- UUID:iden rekonstruointi tietueen luomisajan mukaan
- Tunnisteiden retroaktiivinen generointi

**Esimerkkikäyttö:**

1. Valitse versio v1, v6 tai v7
2. Aseta päivämäärä ja aika päivämäärä- ja aikavalitsimen avulla
3. Generoi UUID omalla aikaleimallasi

### Tiivisteeseen perustuvat UUID:t (v3, v5)

Deterministisiin UUID:ihin voit käyttää versioita v3 (MD5) tai v5 (SHA-1):

**Käyttö:**

1. Valitse nimiavaruus tunnisteen tyypin mukaan
2. Anna nimi/arvo
3. Generoi UUID

**Esimerkit:**

| Nimiavaruus | Nimi (syöte) | Käyttö |
| --- | --- | --- |
| DNS | `example.com` | Verkkotunnuksen muuntaminen UUID:ksi |
| DNS | `google.com` | Jokaisella verkkosivulla on yksilöllinen UUID |
| URL | `https://example.com/page` | URL-osoitteen muuntaminen UUID:ksi |
| URL | `https://api.example.com/users/123` | API-päätepiste UUID:ksi |
| OID | `1.3.6.1.4.1.343` | Objektitunniste UUID:ksi |
| X.500 | `CN=John Doe,O=Company` | Distinguished Name UUID:ksi |

**Tärkeät ominaisuudet:**

- ✅ **Deterministinen**: Sama syöte = aina sama UUID
- ✅ **Toistettavissa**: Voit luoda UUID:n uudelleen milloin tahansa
- ✅ **Yhdenmukainen**: Sama UUID eri järjestelmissä
- ❌ **Ei voida dekoodata**: UUID:stä ei voi palauttaa alkuperäistä nimeä
- ℹ️ **Yksi UUID**: V3/v5:lle generoidaan aina vain yksi UUID (sama syöte = sama tuloste)

**Käytännön käyttö:**

```
// Esimerkki: URL:n muuntaminen UUID v5:ksi
Namespace: URL
Nimi: https://example.com/api/users/123
Tulos: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// Sama syöte = aina sama UUID
Namespace: DNS
Nimi: google.com
Tulos: aina sama UUID google.com:lle
```

## Kuinka käyttää UUID:tä turvallisesti?

### Kryptografinen turvallisuus

Generaattorimme käyttää `crypto.getRandomValues()` -funktiota, joka on kryptografisesti turvallinen satunnaislukugeneraattori. Toisin kuin `Math.random()`, joka on ennustettavissa eikä sovellu turvallisuustarkoituksiin, `crypto.getRandomValues()` tarjoaa todellisen entropian, joka soveltuu:

- Turvallisuustunnusten generointiin
- Istunnon tunnisteisiin
- API-avaimiin
- Kryptografisiin sovelluksiin

### UUID-versioiden vertailu

| Versio | Perusta | Kollisiot | Aikajärjestys | DB-suorituskyky | Käyttö |
| --- | --- | --- | --- | --- | --- |
| v1 | Aikaleima + MAC | Matala | ✅ Kyllä | ❌ Huonompi | Vanhentunut, auditointi |
| v3 | MD5-tiiviste | Ei (deterministinen) | ❌ Ei | ⚠️ Keskinkertainen | Muunnokset (vanhentunut) |
| v4 | Satunnainen | Erittäin matala | ❌ Ei | ⚠️ Keskinkertainen | Yleiskäyttö |
| v5 | SHA-1-tiiviste | Ei (deterministinen) | ❌ Ei | ⚠️ Keskinkertainen | Muunnokset (suositeltu) |
| v6 | Järjestetty aikaleima | Matala | ✅ Kyllä | ✅ Parempi | Moderni DB ajalla |
| v7 | Unix-aikaleima | Matala | ✅ Kyllä | ✅ Paras | Uudet projektit |

### UUID vs. muut tunnisteet

| Tyyppi | Koko | Kollisiot | Aikajärjestys | Käyttö |
| --- | --- | --- | --- | --- |
| Auto-increment ID | 4-8 tavua | Taatusti yksilöllinen taulukossa | ❌ | Yksinkertaiset sovellukset, paikallinen DB |
| UUID v4 | 16 tavua | Käytännössä mahdotonta | ❌ | Hajautetut järjestelmät, API |
| UUID v7 | 16 tavua | Käytännössä mahdotonta | ✅ | Moderni DB suorituskyvyllä |
| ULID | 16 tavua | Käytännössä mahdotonta | ✅ | UUID + leksikografinen järjestys |
| Snowflake ID | 8 tavua | Taatusti yksilöllinen oikealla konfiguraatiolla | ✅ | Twitter, hajautetut järjestelmät |
| NanoID | Konfiguroitavissa | Riippuu pituudesta | ❌ | URL-ystävälliset tunnukset |

## Toteutus eri kielillä

### JavaScript/TypeScript

```
// UUID v4 - Yksinkertaisin tapa (nykyaikaiset selaimet)
const uuid = crypto.randomUUID();

// UUID v4 - Manuaalinen toteutus
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 - Suositeltu tietokannoille
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())
# Tuloste: '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();
```

## Parhaat käytännöt

### UUID:n tallentaminen tietokantaan

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

**Vinkki:** MySQL:ssä tallenna UUID `BINARY(16)`\-muodossa `CHAR(36)`:n sijaan tilan säästämiseksi ja nopeamman indeksoinnin vuoksi.

### UUID:n validointi

```
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:n muuntaminen

```
// Viivojen poistaminen
const compact = uuid.replace(/-/g, '');

// Viivojen lisääminen takaisin
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('-');
}
```

## Ongelmanratkaisu (Troubleshooting)

### UUID v3/v5 ei toimi

**Ongelma:** Kun v3 tai v5 on valittu, mitään ei generoidu

**Ratkaisu:**

1. ✅ Tarkista, että olet **täyttänyt “Nimi” -kentän** – se on pakollinen!
2. ✅ Valitse oikea nimiavaruus syötteesi tyypin mukaan
3. ✅ Esimerkkejä kelvollisista syötteistä:
   - DNS: `example.com`, `google.com`
   - URL: `https://example.com/page`
   - Mikä tahansa teksti: `minun-sovellukseni-v1`

**Vinkki:** Kokeile ensin yksinkertaista arvoa, kuten `test`, ja nimiavaruutta DNS.

### Aikaan perustuvalla UUID:llä (v1, v6, v7) on outo aika

**Ongelma:** Generoidulla UUID:llä on odottamaton aikaleima

**Ratkaisu:**

1. ✅ Tarkista päivämäärä- ja aikavalitsin – onko oikea aika asetettu?
2. ✅ Päivämäärä- ja aikavalitsin käyttää paikallista aikavyöhykettäsi
3. ✅ Jätä päivämäärä- ja aikavalitsin tyhjäksi nykyistä aikaa varten

### UUID:tä ei voi kopioida

**Ongelma:** “Kopioi kaikki” -painike ei toimi

**Ratkaisu:**

1. ✅ Tarkista, että olet generoinut UUID:itä (ne eivät ole tyhjiä)
2. ✅ Jotkut selaimet vaativat HTTPS-yhteyden leikepöydän API:lle
3. ✅ Vaihtoehtoisesti valitse teksti tekstialueelta ja kopioi manuaalisesti (Ctrl+C)

## Usein kysytyt kysymykset (FAQ)

### Voiko UUID:ssä tapahtua kollisiota?

Teoreettisesti kyllä, mutta todennäköisyys on tähtitieteellisen pieni. Kun generoidaan miljardi UUID v4:ää sekunnissa 100 vuoden ajan, kollision todennäköisyys on noin 0,00000006%. Käytännössä kollisiota ei koskaan tapahdu.

### Sopiiko UUID tietokannan perusavaimeksi?

Riippuu käyttötapauksesta. UUID on ihanteellinen hajautettuihin järjestelmiin ja tilanteisiin, joissa tarvitaan globaalia yksilöllisyyttä. Yksinkertaisiin sovelluksiin, joissa on yksi tietokanta, auto-increment voi olla tehokkaampi.

### Ovatko tämän työkalun generoimat UUID:t turvallisia?

Kyllä, käytämme Web Crypto API:ta (\`crypto.getRandomValues()\`), joka tarjoaa kryptografisesti turvallisia satunnaisia arvoja. Kaikki tapahtuu paikallisesti selaimessasi.

### Mitä eroa on UUID-versioiden välillä?

\- \*\*v1\*\*: Aikaleima + MAC/satunnainen - kronologinen järjestys, heikompi DB-suorituskyky - \*\*v3/v5\*\*: Tiivisteeseen perustuva - deterministinen, tunnettujen tunnisteiden muuntamiseen - \*\*v4\*\*: Satunnainen - turvallisin, yleisimmin käytetty - \*\*v6\*\*: Järjestetty aikaleima - parempi DB-suorituskyky kuin v1 - \*\*v7\*\*: Unix-aikaleima - paras DB-suorituskyky + aikajärjestys

### Mitä UUID-versiota minun tulisi käyttää?

Useimmissa tapauksissa käytä \*\*v4\*\* (satunnainen). Tietokannoissa, joissa tarvitaan aikajärjestystä, käytä \*\*v7\*\* (moderni) tai \*\*v6\*\* (standardi). Tunnettujen tunnisteiden (URL, DNS) muuntamiseen käytä \*\*v5\*\* (SHA-1).

### Voinko käyttää UUID:tä tunnuksiin ja API-avaimiin?

UUID v4 soveltuu istuntotunnuksiin ja vastaaviin tunnuksiin. API-avaimiin harkitse pidempien satunnaisten merkkijonojen (esim. 256-bittiset arvot) tai erikoistuneiden kirjastojen käyttöä.

### Kuinka suuria UUID:t ovat?

UUID on 128-bittinen (16 tavua). Merkkijonona viivojen kanssa se vie 36 merkkiä. Ilman viivoja 32 heksadesimaalimerkkiä.

## Vaihtoehtoja UUID:lle

### ULID (Universally Unique Lexicographically Sortable Identifier)

- 128-bittinen tunniste (kuten UUID)
- Leksikografisesti järjestettävissä luomisajan mukaan
- Tiiviimpi esitys (26 merkkiä 36:n sijaan)
- Isot ja pienet kirjaimet salliva base32-enkoodaus

**Esimerkki:** `01ARZ3NDEKTSV4RRFFQ69G5FAV`

### NanoID

- Pienempi koko kuin UUID (yleensä 21 merkkiä)
- URL-ystävällinen (ei erikoismerkkejä)
- Nopeampi generointi
- Konfiguroitavissa oleva pituus ja aakkoset

**Esimerkki:** `V1StGXR8_Z5jdHi6B-myT`

### Snowflake ID (Twitter)

- 64-bittinen tunniste (pienempi kuin UUID)
- Ajallisesti järjestettävissä
- Sisältää worker ID:n ja järjestysnumeron
- Vaatii keskitetyn konfiguraation

**Esimerkki:** `1234567890123456789`

## Suorituskyky ja optimointi

### Generointinopeus

Generaattorimme pystyy generoimaan:

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

### Vinkkejä suorituskykyyn

1. **Erägenerointi** – Jos tarvitset paljon UUID:itä, generoi ne kerralla yhden sijaan
2. **Tallennus DB:hen** – Indeksoi UUID-sarakkeet nopeaa hakua varten
3. **Pakkaus** – Tallenna UUID:t binäärimuodossa (16 tavua) merkkijonon (36 tavua) sijaan
4. **Välimuistitallennus** – Joissakin tapauksissa voit esigeneroida ja välimuistitallentaa UUID:itä

## Kehittäjille

### UUID v4:n rakenne

```
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 bittiä satunnaista dataa (solmu)
|        |    |    └────── 16 bittiä satunnaista dataa variantin kanssa (kello_järjestyksen_numero)
|        |    └─────────── 12 bittiä satunnaista dataa + 4 bittiä versiota (aika_yläosa_ja_versio)
|        └──────────────── 16 bittiä satunnaista dataa (aika_keski)
└───────────────────────── 32 bittiä satunnaista dataa (aika_ala)
```

- Versio (4 bittiä): aina `0100` (binääri) = `4` (heksa)
- Variantit (2-3 bittiä): aina `10` (binääri) RFC 4122:lle

### UUID:n testaus

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

## Turvallisuusnäkökohdat

### Mitä ei pidä tehdä UUID:n kanssa

❌ **Älä käytä UUID v1:tä arkaluonteisissa sovelluksissa** – Se sisältää aikaleiman, mikä voi olla tietoturvariski

❌ **Älä käytä `Math.random()`\-funktiota UUID:n generointiin** – Se ei ole kryptografisesti turvallinen

❌ **Älä luota UUID:hin valtuutuksessa** – UUID voidaan arvata (vaikka erittäin pienellä todennäköisyydellä)

❌ **Älä tallenna UUID:tä evästeisiin ilman salausta** – Käytä allekirjoitettuja evästeitä tai JWT:tä

### Mitä tehdä

✅ **Käytä UUID v4:ää useimmissa tapauksissa** – Suurin entropia ja turvallisuus

✅ **Yhdistä UUID muihin turvallisuuskeinoihin** – Istunnonhallinnassa käytä HTTPS:ää, HttpOnly-evästeitä ja lyhyttä vanhenemisaikaa

✅ **Validoi UUID palvelimella** – Tarkista aina UUID:n muoto ja versio

✅ **Käytä kryptografisesti turvallisia satunnaislähteitä** – `crypto.getRandomValues()` selaimessa, `/dev/urandom` Linuxissa

## Mielenkiintoisia faktoja

- **Mahdollisten UUID v4:n määrä:** 2^122 ≈ 5.3 × 10^36 (340 undeciljoonaa)
- **Tarvittava kollision todennäköisyys:** 50 %:n kollision todennäköisyyden saavuttamiseksi on generoitava 2.71 × 10^18 UUID:tä (2.71 kvintiljoonaa)
- **Kaikkien mahdollisten UUID:iden koko:** Jos jokainen UUID tallennettaisiin 16 tavun kokoisena, koko tila veisi 85 zettatavua (85 miljardia teratavua)
- **Alkuperä:** UUID standardoitiin osana DCE:tä (Distributed Computing Environment) vuonna 1990

## 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))
- 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))
- 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))
