🛠️

Whiz Tools

Build • Create • Innovate

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

Struktura UUID-a
Vrijeme nisko
📚

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:

A B C D E F A: time_low (32 bita) B: time_mid (16 bita) C: time_hi_and_version (16 bita) D: clock_seq_hi_and_reserved (8 bita) E: clock_seq_low (8 bita) F: node (48 bita)

Verzije UUID-a

Postoji nekoliko verzija UUID-a, od kojih svaka ima svoju metodu generiranja:

  1. Verzija 1 (temeljena na vremenu): Koristi trenutni vremenski pečat i MAC adresu računala.
  2. Verzija 2 (DCE sigurnost): Slična verziji 1, ali uključuje identifikator lokalnog domena.
  3. Verzija 3 (temeljena na imenu, MD5): Generira se hashiranjem identifikatora prostora imena i imena.
  4. Verzija 4 (nasumična): Generira se pomoću nasumičnog ili pseudo-nasumičnog broja.
  5. 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:

  1. Vremenski pečat: 60-bitna vrijednost koja predstavlja broj intervala od 100 nanosekundi od 15. listopada 1582. (datum reforme gregorijanskog kalendara).
  2. Sekvenca sata: 14-bitna vrijednost koja se koristi za izbjegavanje dupliciranja u slučaju da se sat postavi unazad.
  3. Č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:

  1. 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.

  2. 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.

  3. Adresiranje sadržaja: UUID-ovi se mogu koristiti za stvaranje jedinstvenih identifikatora za sadržaj u sustavima za pohranu s adresiranjem sadržaja.

  4. Upravljanje sesijama: Web aplikacije često koriste UUID-ove za upravljanje korisničkim sesijama, osiguravajući da svaka sesija ima jedinstveni identifikator.

  5. 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:

  1. Automatski povećavajući ID-ovi: Jednostavni i često korišteni u sustavima s jednom bazom podataka, ali nisu prikladni za distribuirana okruženja.

  2. ID-ovi temeljeni na vremenu: Mogu biti korisni za vremenski poredane podatke, ali mogu imati problema s kolizijama u scenarijima s visokom konkurencijom.

  3. 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.

  4. 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

Reference

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. 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
  3. Univerzalno jedinstveni identifikator. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). U Wikipediji. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec