UUID Generator for Time-Based and Random Identifiers
Generirajte univerzalno jedinstvene identifikatore (UUID) za razne aplikacije. Kreirajte verziju 1 (temeljenu na vremenu) i verziju 4 (nasumičnu) UUID-ove za korištenje u distribuiranim sustavima, bazama podataka i još mnogo toga.
Generator UUID-a
Generirani UUID
Dokumentacija
Generator UUID-a
Uvod
Univerzalno jedinstveni identifikator (UUID) je 128-bitni broj koji se koristi za identifikaciju informacija u računalnim sustavima. UUID-ovi su standardizirani od strane Open Software Foundation (OSF) kao dio Distribuiranog računalnog okruženja (DCE). Ovi identifikatori su dizajnirani da budu jedinstveni u prostoru i vremenu, što ih čini idealnim za razne primjene u distribuiranim sustavima i šire.
Ovaj alat za generiranje UUID-a omogućuje vam stvaranje verzije 1 (temeljene na vremenu) i verzije 4 (nasumične) UUID-ova. Ovi identifikatori su korisni u raznim scenarijima gdje je potrebna jedinstvena identifikacija, kao što su ključevi baza podataka, distribuirani sustavi i mrežni protokoli.
Kako UUID-ovi rade
Struktura UUID-a
UUID se obično prikazuje kao 32 heksadecimalne znamenke, prikazane u pet grupa odvojene crticama, u obliku 8-4-4-4-12 za ukupno 36 znakova (32 alfanumerična znaka i 4 crte). Na primjer:
1550e8400-e29b-41d4-a716-446655440000
2
128 bita UUID-a podijeljeno je u specifična polja, pri čemu svako nosi različite informacije ovisno o verziji UUID-a:
- 32 bita za polje time_low
- 16 bita za polje time_mid
- 16 bita za polje time_hi_and_version
- 8 bita za polje clock_seq_hi_and_reserved
- 8 bita za polje clock_seq_low
- 48 bita za polje node
Evo dijagrama koji ilustrira strukturu UUID-a:
Verzije UUID-a
Postoji nekoliko verzija UUID-a, od kojih svaka ima svoju metodu generiranja:
- Verzija 1 (temeljena na vremenu): Koristi trenutni vremenski pečat i MAC adresu računala.
- Verzija 2 (DCE sigurnost): Slična verziji 1, ali uključuje identifikator lokalnog domena.
- Verzija 3 (temeljena na imenu, MD5): Generira se hashiranjem identifikatora prostora imena i imena.
- Verzija 4 (nasumična): Generira se pomoću nasumičnog ili pseudo-nasumičnog broja.
- Verzija 5 (temeljena na imenu, SHA-1): Slična verziji 3, ali koristi SHA-1 hashiranje.
Ovaj alat se fokusira na generiranje verzija 1 i 4 UUID-ova.
Formula
Generiranje UUID-a verzije 1
UUID-ovi verzije 1 generiraju se koristeći sljedeće komponente:
- Vremenski pečat: 60-bitna vrijednost koja predstavlja broj intervala od 100 nanosekundi od 15. listopada 1582. (datum reforme gregorijanskog kalendara).
- Sekvenca sata: 14-bitna vrijednost koja se koristi za izbjegavanje dupliciranja u slučaju da se sat postavi unazad.
- Čvor: 48-bitna vrijednost, obično izvedena iz MAC adrese računala.
Formula za generiranje UUID-a verzije 1 može se izraziti kao:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
Generiranje UUID-a verzije 4
UUID-ovi verzije 4 generiraju se pomoću kriptografski jakog generatora nasumičnih brojeva. Formula je jednostavno:
1UUID = random_128_bit_number
2
Uz specifične bitove postavljene da označe verziju (4) i varijantu.
Primjene
UUID-ovi imaju brojne primjene u raznim domenama računalne znanosti i softverskog inženjerstva:
-
Ključevi baza podataka: UUID-ovi se često koriste kao primarni ključevi u bazama podataka, posebno u distribuiranim sustavima gdje više čvorova može istovremeno generirati zapise.
-
Distribuirani sustavi: U velikim distribuiranim sustavima, UUID-ovi pomažu u jedinstvenom identificiranju resursa, transakcija ili događaja među više čvorova ili podatkovnih centara.
-
Adresiranje sadržaja: UUID-ovi se mogu koristiti za stvaranje jedinstvenih identifikatora za sadržaj u sustavima za pohranu s adresiranjem sadržaja.
-
Upravljanje sesijama: Web aplikacije često koriste UUID-ove za upravljanje korisničkim sesijama, osiguravajući da svaka sesija ima jedinstveni identifikator.
-
Identifikacija IoT uređaja: U aplikacijama Interneta stvari (IoT), UUID-ovi se mogu koristiti za jedinstveno identificiranje pojedinačnih uređaja u mreži.
Alternativne metode
Iako su UUID-ovi široko korišteni, postoje alternativni pristupi generiranju jedinstvenih identifikatora:
-
Automatski povećavajući ID-ovi: Jednostavni i često korišteni u sustavima s jednom bazom podataka, ali nisu prikladni za distribuirana okruženja.
-
ID-ovi temeljeni na vremenu: Mogu biti korisni za vremenski poredane podatke, ali mogu imati problema s kolizijama u scenarijima s visokom konkurencijom.
-
Snowflake ID-ovi: Razvili su ih Twitter, ovi ID-ovi kombiniraju vremenski pečat i broj radnika za generiranje jedinstvenih ID-ova u distribuiranim sustavima.
-
ULID (Univerzalno jedinstveni leksikografski sortirani identifikator): Novija alternativa koja ima za cilj biti prijateljskija prema ljudima i sortirana od UUID-ova.
Povijest
Koncept UUID-ova prvi put je predstavljen u Apollo Network Computing System i kasnije standardiziran od strane Open Software Foundation (OSF) kao dio Distribuiranog računalnog okruženja (DCE) 1990-ih. Prva specifikacija objavljena je 1997. godine kao ISO/IEC 11578:1996, a kasnije je revidirana 2005. godine kao dio ISO/IEC 9834-8:2005.
Ključni trenuci u povijesti UUID-a:
- 1980-e: Apollo Computer razvija koncept UUID-a za svoj sustav mrežnog računalstva.
- 1997: Prva specifikacija UUID-a objavljena kao ISO/IEC 11578:1996.
- 2005: Specifikacija UUID-a revidirana i objavljena kao dio ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definira format UUID-a i algoritme generiranja koji se danas koriste.
S vremenom, UUID-ovi su postali bitan alat u distribuiranim sustavima i dizajnu baza podataka, s raznim implementacijama i prilagodbama u različitim programskim jezicima i platformama.
Primjeri koda
Evo primjera generiranja UUID-ova u raznim programskim jezicima:
1import uuid
2
3## Generirajte UUID verzije 4 (nasumični)
4random_uuid = uuid.uuid4()
5print(f"UUID verzije 4: {random_uuid}")
6
7## Generirajte UUID verzije 1 (temeljeni na vremenu)
8time_based_uuid = uuid.uuid1()
9print(f"UUID verzije 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// Generirajte UUID verzije 4 (nasumični)
4const randomUuid = uuidv4();
5console.log(`UUID verzije 4: ${randomUuid}`);
6
7// Generirajte UUID verzije 1 (temeljeni na vremenu)
8const timeBasedUuid = uuidv1();
9console.log(`UUID verzije 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // Generirajte UUID verzije 4 (nasumični)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID verzije 4: " + randomUuid);
8
9 // Generirajte UUID verzije 1 (temeljeni na vremenu)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID verzije 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## Generirajte UUID verzije 4 (nasumični)
4random_uuid = SecureRandom.uuid
5puts "UUID verzije 4: #{random_uuid}"
6
7## Ruby nema ugrađenu metodu za UUID verzije 1
8## Trebali biste koristiti gem poput 'uuidtools' za to
9
1<?php
2// Generirajte UUID verzije 4 (nasumični)
3$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
4 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
5 mt_rand(0, 0xffff),
6 mt_rand(0, 0x0fff) | 0x4000,
7 mt_rand(0, 0x3fff) | 0x8000,
8 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
9);
10echo "UUID verzije 4: " . $randomUuid . "\n";
11
12// PHP nema ugrađenu metodu za UUID verzije 1
13// Trebali biste koristiti biblioteku poput 'ramsey/uuid' za to
14?>
15
Reference
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- Međunarodna organizacija za standardizaciju. (2005). Informacijska tehnologija – Otvorena sustavna međusobna povezanost – Postupci za rad OSI registracijskih vlasti: Generiranje i registracija univerzalno jedinstvenih identifikatora (UUID) i njihova upotreba kao komponenti ASN.1 objektnog identifikatora. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Univerzalno jedinstveni identifikator. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Povratne informacije
Kliknite na obavijest o povratnim informacijama da biste započeli davati povratne informacije o ovom alatu
Povezani alati
Otkrijte više alata koji bi mogli biti korisni za vaš radni proces