UUID-generaattori – Luo yksilöllisiä tunnisteita verkossa
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ö:
- Valitse versio v1, v6 tai v7
- Aseta päivämäärä ja aika päivämäärä- ja aikavalitsimen avulla
- 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ö:
- Valitse nimiavaruus tunnisteen tyypin mukaan
- Anna nimi/arvo
- 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:
- ✅ Tarkista, että olet täyttänyt “Nimi” -kentän – se on pakollinen!
- ✅ Valitse oikea nimiavaruus syötteesi tyypin mukaan
- ✅ Esimerkkejä kelvollisista syötteistä:
- DNS:
example.com,google.com - URL:
https://example.com/page - Mikä tahansa teksti:
minun-sovellukseni-v1
- DNS:
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:
- ✅ Tarkista päivämäärä- ja aikavalitsin – onko oikea aika asetettu?
- ✅ Päivämäärä- ja aikavalitsin käyttää paikallista aikavyöhykettäsi
- ✅ 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:
- ✅ Tarkista, että olet generoinut UUID:itä (ne eivät ole tyhjiä)
- ✅ Jotkut selaimet vaativat HTTPS-yhteyden leikepöydän API:lle
- ✅ 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ärjestysMitä 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
- Erägenerointi – Jos tarvitset paljon UUID:itä, generoi ne kerralla yhden sijaan
- Tallennus DB:hen – Indeksoi UUID-sarakkeet nopeaa hakua varten
- Pakkaus – Tallenna UUID:t binäärimuodossa (16 tavua) merkkijonon (36 tavua) sijaan
- 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