UUID Generatorius
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:
- Pasirinkite v1, v6 arba v7 versiją
- Nustatykite datą ir laiką naudodami datos ir laiko parinkiklį
- 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:
- Pasirinkite vardų sritį pagal savo identifikatoriaus tipą
- Įveskite pavadinimą/reikšmę
- 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:
- ✅ Patikrinkite, ar užpildėte „Pavadinimo“ laukelį – jis yra privalomas!
- ✅ Pasirinkite tinkamą vardų sritį pagal savo įvesties tipą
- ✅ Tinkamų įvesčių pavyzdžiai:
- DNS:
example.com,google.com - URL:
https://example.com/page - Bet koks tekstas:
mano-programa-v1
- DNS:
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:
- ✅ Patikrinkite datos ir laiko parinkiklį – ar nustatytas teisingas laikas?
- ✅ Datos ir laiko parinkiklis naudoja jūsų vietinę laiko juostą
- ✅ Palikite datos ir laiko parinkiklį tuščią, kad būtų nustatytas dabartinis laikas
UUID negalima nukopijuoti
Problema: Mygtukas „Kopijuoti viską“ neveikia
Sprendimas:
- ✅ Patikrinkite, ar sugeneravote UUID (jie nėra tušti)
- ✅ Kai kurioms naršyklėms reikalingas HTTPS, kad veiktų iškarpinės API
- ✅ 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ūšiavimasKurią 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
- Paketinis generavimas – Jei reikia daug UUID, generuokite juos iš karto, o ne po vieną
- Saugoti DB – Indeksuokite UUID stulpelius greitai paieškai
- Suspaudimas – Saugokite UUID dvejetainiu pavidalu (16 baitų) vietoj eilutės (36 baitai)
- 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.