UUID v4 -generaattori – arvaamaton, selaimesi satunnaisuudella luotu tunniste
Tämä sivu tuottaa yhden tai useamman UUID v4 -tunnisteen – 36 merkkiä pitkiä merkkijonoja, jotka noudattavat vakiomuotoa 8-4-4-4-12 heksadesimaalilukuja. Voit valita tunnisteiden lukumäärän (1–100), kirjainkoon (pienaakkoset oletuksena, voit vaihtaa suuraakkosiin) ja sen, sisällytetäänkö tunnisteisiin tavuviivat (oletuksena kyllä). Kaikki generointi tapahtuu paikallisesti selaimesi vahvalla satunnaislukugeneraattorilla – mitään ei lähetetä palvelimelle. Yksittäisen tunnisteen tai kaikki kerralla voi kopioida leikepöydälle yhdellä napsautuksella.
Miksi tämä sivu eroaa muista
UUID v4 käyttää 122 satunnaisbittiä eikä sisällä aikaleimaa. Jokainen arvo on siten käytännössä arvaamaton, ja törmäys (saman tunnisteen syntyminen toistamiseen) on erittäin epätodennäköistä. Toisin kuin UUID v7 tai ULID, v4-tunnisteet eivät lajitu aikajärjestykseen – ne eivät sisällä mitään ajallista tietoa. Tämä hajottaa tietokantaindeksejä silloin, kun UUID v4:tä käytetään pääavaimena. Sivulla voit myös vaihtaa kirjainkoko- ja tavuviiva-asetuksia, mutta itse satunnaisuus ja muoto pysyvät muuttumattomina.
Oletusarvoisesti tunnisteet ovat pienaakkosia ja sisältävät tavuviivat. Jos muutat mitä tahansa asetusta (lukumäärä, kirjainkoko, tavuviivat), koko tunnistejoukko generoidaan uudelleen heti.
UUID v4:n rakenne ja satunnaisuus
UUID v4 määritellään RFC 4122 -standardissa. Se koostuu 16 oktetista (128 bitistä), joista 122 bittiä on satunnaisia. Loput 6 bittiä on varattu versio- ja varianttitunnuksille: 4 bittiä ilmaisevat version (0100 = v4), ja 2 bittiä variantin (10xx). Tämä tarkoittaa, että jokaisessa tunnisteessa on kiinteät merkit esimerkiksi kolmannessa lohkossa: versionumeron vuoksi kolmannen lohkon ensimmäinen merkki on aina 4. Vastaavasti neljännen lohkon ensimmäinen merkki on aina 8, 9, a tai b (binäärinä 10xx).
Käytännössä tunniste näyttää tältä:
f47ac10b-58cc-4372-a567-0e02b2c3d479
Tästä 4 kohdassa 13 on versioindikaattori, ja a kohdassa 18 on variantti. Jäljelle jää 32 heksadesimaalimerkkiä, joista 30 on täysin satunnaisia (120 bittiä) ja 2 sisältävät version ja variantin (2 bittiä). Bittitasolla satunnaisia bittejä on siis 122.
Selaimessa satunnaisluvut tuotetaan crypto.getRandomValues()-menetelmällä, joka käyttää käyttöjärjestelmän salausvahvaa satunnaislähdettä. Toisin kuin Math.random(), tämä tuottaa bittejä, jotka soveltuvat turvallisuuskriittisiin käyttökohteisiin (esimerkiksi istuntotunnukset, CSRF-tokenit). Kaikki generointi tapahtuu paikallisesti – sivu ei koskaan lähetä tunnisteita palvelimelle eikä tallenna niitä.
Törmäystodennäköisyys – miksi se on käytännössä olematon
122 satunnaisbittiä tarkoittaa 2^122 mahdollista arvoa. Tämä on noin 5,3 × 10^36. Törmäyksen todennäköisyys nollan ja yhden välisten kertymien avulla: jos generoit 1 miljardi tunnistetta (10^9), todennäköisyys, että edes kaksi on samoja, on luokkaa 10^-19. Vertailun vuoksi: satunnaisesti valitun ihmisen syntymäpäivän todennäköisyys osua tiettyyn päivämäärään on noin 1/365 ≈ 0,0027. Törmäys UUID v4:ssä on siis tähtitieteellisen epätodennäköistä – paljon epätodennäköisempää kuin se, että sama henkilö voittaisi loton päävoiton kaksi kertaa peräkkäin.
Tästä syystä UUID v4 sopii erinomaisesti sovelluksiin, joissa tarvitaan yksilöllisiä tunnisteita ilman keskuspalvelinta. Ainoa ongelma on teoreettinen: jos generaattori saisi huonoa satunnaisuutta (esimerkiksi palvelimen alkutila olisi heikko), törmäykset voisivat lisääntyä. Tämä sivu käyttää kuitenkin selaimen salausvahvaa generaattoria, joka on hyvin testattu ja luotettava.
UUID v4:n vaikutus tietokantaindekseihin – sudenkuoppa
Koska UUID v4 ei sisällä aikaleimaa, tunnisteet ovat satunnaisessa järjestyksessä. Jos niitä käytetään relaatiotietokannan pääavaimena (erityisesti klusteroidussa indeksissä, kuten MySQL InnoDB:n PRIMARY KEY), jokainen uusi tunniste voi tulla mihin tahansa kohtaan indeksiä. Tämä johtaa sivunhalkomisiin (page splits) ja indeksin pirstaloitumiseen. Tulos: kirjoitusoperaatiot hidastuvat, ja indeksi vie enemmän levytilaa.
Vertaa tätä UUID v7:ään, jossa käytetään aikaleimaa (millisekunteja) satunnaisbittien rinnalla. UUID v7 tunnisteet lajittuvat aikajärjestykseen, joten ne lisätään indeksin loppuun – se on paljon ystävällisempi tietokannalle. Sama pätee ULID:hen ja aikaleimaan perustuviin tunnisteisiin.
Jos siis suunnittelet tietokannan pääavainta ja odotat paljon kirjoituksia (esimerkiksi lokimerkinnät, käyttäjätilit), kannattaa harkita UUID v7:ää tai ULID:iä, elleivät turvallisuusvaatimukset edellytä täydellistä arvaamattomuutta. UUID v4 sopii paremmin tilanteisiin, joissa arvaamattomuus on tärkeämpää kuin lajiteltavuus: esimerkiksi sessioiden tunnisteet, CSRF-tokenit, salasanan palautuslinkit, anonymisoidut avaimet.
Käyttökohteet ja kohderyhmät
Tämä sivu on suunnattu erityisesti:
- Kehittäjille, jotka tarvitsevat uniikkeja, arvaamattomia tunnisteita turvallisuuskonteksteihin (tokenit, sessiovarastot, API-avaimet).
- Tietokanta-asiantuntijoille, jotka tiedostavat UUID v4:n vaikutuksen indeksien suorituskykyyn ja haluavat kontrolloida tunnisteiden muotoa (iso/pienaakkoset, tavuviivat).
- Testaajille, jotka generoivat suuria määriä testidataa nopeasti (jopa 100 tunnistetta kerralla).
- Kaikille, jotka haluavat luoda ulkoisia tunnistetta (esimerkiksi asiakasnumeroita, tilaustunnuksia) ilman aika- tai järjestysinformaatiota.
Asetukset ja niiden vaikutus
Sivulla on kolme säädintä:
- Lukumäärä (Count) – arvo väliltä 1–100. Muuttamalla lukumäärää tunnisteet generoidaan uudelleen.
- Uppercase – oletuksena ei (pienaakkoset). Kytkemällä päälle kaikki heksadesimaalimerkit muuttuvat suuraakkosiksi (A–F). Tämä vaikuttaa vain ulkoasuun; itse satunnaisuus pysyy samana.
- Include hyphens – oletuksena kyllä. Jos kytket pois, tunnisteet tulostetaan ilman tavuviivoja (esim.
f47ac10b58cc4372a5670e02b2c3d479). Tämä on hyödyllistä esimerkiksi järjestelmissä, jotka eivät tue tavuviivoja tai haluavat pelkistetyn esityksen.
Tärkeä huomio: muuttamalla mitä tahansa asetusta koko tunnistejoukko generoidaan uudelleen. Jos siis olet juuri kopioinut tunnisteita ja vaihdat kirjainkokoa, kaikki aikaisemmat tunnisteet katoavat ja tilalle tulee uudet. Tämä estää vahingossa tapahtuvan vanhojen ja uusien tunnisteiden sekoittamisen.
FAQ (usein kysytyt kysymykset)
1. Voinko luottaa tämän sivun tuottamiin tunnisteisiin turvallisuuskonteksteissa?
Kyllä. Kaikki satunnaisluvut tuotetaan selaimen crypto.getRandomValues()-menetelmällä, joka on salausvahva. Mitään tietoa ei lähetetä palvelimelle. Voit tarkistaa itse avaamalla selaimen kehittäjätyökalut ja katsomalla verkkoviestiliikennettä – yhteyksiä ei tule.
2. Miksi UUID v4:ssä on aina 4 kolmannen lohkon alussa?
Se on version indikaattori RFC 4122 -standardin mukaisesti. Kyseinen paikka sisältää bitit 48–51, ja v4:n tapauksessa ne on asetettu arvoon 0100, mikä heksadesimaalina on 4. Vastaavasti neljännen lohkon alussa on aina 8, 9, a tai b, koska variantti (10xx) vaatii sen.
3. Miksi en voi muuttaa tunnisteiden pituutta tai muotoa yksityiskohtaisemmin?
Sivu on suunniteltu tuottamaan standardinmukaisia UUID v4 -tunnisteita. Pituus (128 bittiä, 36 merkkiä tavuviivoilla) on määrätty standardissa. Jos tarvitset eri pituisia tunnisteita, vaihda käyttämäsi tunnistetyyppi (esimerkiksi NanoID) – tämän sivun valikossa voit valita UUID v7:n, ULID:n tai NanoID:n, joilla on omat asetuksensa.
4. Miten saan tunnisteet ilman tavuviivoja?
Valitse "Include hyphens" -kytkin pois päältä. Tällöin tunnisteet tulostuvat 32 merkin pituisena heksadesimaalijonona. Huomaa, että tämä muuttaa tunnisteen muotoa, mutta se on edelleen validi UUID v4 (vaikka jotkut ohjelmistot vaativat tavuviivat).
5. Voinko generoida yli 100 tunnistetta kerralla?
Ei tällä sivulla. Rajaus 100:aan on tarkoituksellinen pitämään käyttöliittymä selkeänä ja estämään vahingossa tapahtuvaa suurta määrää. Jos tarvitset enemmän, generoi 100 tunnistetta useaan kertaan ja yhdistä ne itse.
6. Miksi tunnisteiden järjestys näyttää satunnaiselta?
Koska UUID v4 on satunnainen – sillä ei ole mitään luonnollista järjestystä. Jos lajittelet tunnisteet aakkosjärjestykseen, ne saavat tietyn järjestyksen, mutta se ei kerro mitään niiden syntyajasta. Jos tarvitset aikajärjestyksen, käytä UUID v7:ää, ULID:tä tai aikaleimaa.