Whiz Tools

Generator UUID

UUID generat

Structura UUID
Timp scurt

Generator UUID

Introducere

Un Identificator Unic Universal (UUID) este un număr de 128 de biți folosit pentru a identifica informații în sistemele informatice. UUID-urile sunt standardizate de Open Software Foundation (OSF) ca parte a Mediului de Calcul Distribuit (DCE). Aceste identificatoare sunt concepute pentru a fi unice atât în timp, cât și în spațiu, făcându-le ideale pentru diverse aplicații în sisteme distribuite și nu numai.

Acest instrument de generare UUID vă permite să creați atât UUID-uri de versiunea 1 (bazate pe timp), cât și UUID-uri de versiunea 4 (aleatorii). Aceste identificatoare sunt utile în diverse scenarii în care este necesară identificarea unică, cum ar fi cheile de bază de date, sistemele distribuite și protocoalele de rețea.

Cum funcționează UUID-urile

Structura UUID

Un UUID este de obicei reprezentat ca 32 de cifre hexazecimale, afișate în cinci grupuri separate prin cratime, în forma 8-4-4-4-12 pentru un total de 36 de caractere (32 de caractere alfanumerice și 4 cratime). De exemplu:

550e8400-e29b-41d4-a716-446655440000

Cei 128 de biți ai unui UUID sunt împărțiți în câmpuri specifice, fiecare purtând informații diferite în funcție de versiunea UUID:

  • 32 de biți pentru câmpul time_low
  • 16 biți pentru câmpul time_mid
  • 16 biți pentru câmpul time_hi_and_version
  • 8 biți pentru câmpul clock_seq_hi_and_reserved
  • 8 biți pentru câmpul clock_seq_low
  • 48 de biți pentru câmpul node

Iată un diagramă care ilustrează structura UUID:

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

Versiuni UUID

Există mai multe versiuni de UUID-uri, fiecare cu propriul său mod de generare:

  1. Versiunea 1 (bazată pe timp): Folosește marca de timp curentă și adresa MAC a computerului.
  2. Versiunea 2 (Securitate DCE): Similară cu versiunea 1, dar include un identificator de domeniu local.
  3. Versiunea 3 (bazată pe nume, MD5): Generată prin hash-izarea unui identificator de spațiu de nume și a unui nume.
  4. Versiunea 4 (aleatorie): Generată folosind un număr aleatoriu sau pseudo-aleatoriu.
  5. Versiunea 5 (bazată pe nume, SHA-1): Similară cu versiunea 3, dar folosește hash-izarea SHA-1.

Acest instrument se concentrează pe generarea UUID-urilor de versiunea 1 și versiunea 4.

Formula

Generarea UUID-ului de versiunea 1

UUID-urile de versiunea 1 sunt generate folosind următoarele componente:

  1. Marca de timp: O valoare de 60 de biți care reprezintă numărul de intervale de 100 de nanosecunde de la 15 octombrie 1582 (data reformei gregoriene a calendarului creștin).
  2. Secvența de ceas: O valoare de 14 biți folosită pentru a evita duplicatele în cazul în care ceasul este setat înapoi.
  3. Nod: O valoare de 48 de biți, de obicei derivată din adresa MAC a computerului.

Formula pentru generarea unui UUID de versiunea 1 poate fi exprimată astfel:

UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node

Generarea UUID-ului de versiunea 4

UUID-urile de versiunea 4 sunt generate folosind un generator de numere aleatorii criptografic puternic. Formula este pur și simplu:

UUID = random_128_bit_number

Cu biți specifici setați pentru a indica versiunea (4) și varianta.

Cazuri de utilizare

UUID-urile au numeroase aplicații în diverse domenii ale informaticii și ingineriei software:

  1. Chei de bază de date: UUID-urile sunt adesea folosite ca chei primare în bazele de date, în special în sistemele distribuite unde mai multe noduri ar putea genera simultan înregistrări.

  2. Sisteme distribuite: În sistemele distribuite de mari dimensiuni, UUID-urile ajută la identificarea unică a resurselor, tranzacțiilor sau evenimentelor între mai multe noduri sau centre de date.

  3. Adresare a conținutului: UUID-urile pot fi folosite pentru a crea identificatori unici pentru conținut în sistemele de stocare adresabile prin conținut.

  4. Managementul sesiunilor: Aplicațiile web folosesc adesea UUID-uri pentru a gestiona sesiunile utilizatorilor, asigurându-se că fiecare sesiune are un identificator unic.

  5. Identificarea dispozitivelor IoT: În aplicațiile Internet of Things (IoT), UUID-urile pot fi folosite pentru a identifica în mod unic dispozitive individuale într-o rețea.

Alternative

Deși UUID-urile sunt utilizate pe scară largă, există abordări alternative pentru generarea identificatorilor unici:

  1. ID-uri auto-incrementale: Simple și utilizate frecvent în sistemele de bază de date unice, dar nu sunt potrivite pentru medii distribuite.

  2. ID-uri bazate pe marcă de timp: Pot fi utile pentru datele ordonate în timp, dar pot întâmpina probleme de coliziune în scenarii de înaltă concurență.

  3. ID-uri Snowflake: Dezvoltate de Twitter, aceste ID-uri combină marca de timp și numărul lucrătorului pentru a genera ID-uri unice în sistemele distribuite.

  4. ULID (Identificator Universal Unic Lexicografic Sortabil): O alternativă mai recentă care își propune să fie mai prietenoasă cu utilizatorul și sortabilă decât UUID-urile.

Istorie

Conceptul de UUID-uri a fost introdus pentru prima dată în Sistemul de Calcul în Rețea Apollo și ulterior standardizat de Open Software Foundation (OSF) ca parte a Mediului de Calcul Distribuit (DCE) în anii 1990. Specificația inițială a fost publicată în 1997 ca ISO/IEC 11578:1996 și ulterior revizuită în 2005 ca parte a ISO/IEC 9834-8:2005.

Puncte cheie în istoria UUID-urilor:

  • Anii 1980: Apollo Computer dezvoltă conceptul UUID pentru Sistemul său de Calcul în Rețea.
  • 1997: Prima specificație UUID publicată ca ISO/IEC 11578:1996.
  • 2005: Specificația UUID revizuită și publicată ca parte a ISO/IEC 9834-8:2005.
  • 2009: RFC 4122 definește formatul UUID și algoritmii de generare folosiți astăzi.

De-a lungul timpului, UUID-urile au devenit un instrument esențial în sistemele distribuite și proiectarea bazelor de date, cu diverse implementări și adaptări în diferite limbaje de programare și platforme.

Exemple de cod

Iată exemple de generare a UUID-urilor în diferite limbaje de programare:

import uuid

## Generați un UUID de versiunea 4 (aleatoriu)
random_uuid = uuid.uuid4()
print(f"UUID de versiunea 4: {random_uuid}")

## Generați un UUID de versiunea 1 (bazat pe timp)
time_based_uuid = uuid.uuid1()
print(f"UUID de versiunea 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// Generați un UUID de versiunea 4 (aleatoriu)
const randomUuid = uuidv4();
console.log(`UUID de versiunea 4: ${randomUuid}`);

// Generați un UUID de versiunea 1 (bazat pe timp)
const timeBasedUuid = uuidv1();
console.log(`UUID de versiunea 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // Generați un UUID de versiunea 4 (aleatoriu)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID de versiunea 4: " + randomUuid);

        // Generați un UUID de versiunea 1 (bazat pe timp)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID de versiunea 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## Generați un UUID de versiunea 4 (aleatoriu)
random_uuid = SecureRandom.uuid
puts "UUID de versiunea 4: #{random_uuid}"

## Ruby nu are o metodă încorporată pentru UUID-uri de versiunea 1
## Ar trebui să folosiți o gemă precum 'uuidtools' pentru asta
<?php
// Generați un UUID de versiunea 4 (aleatoriu)
$randomUuid = 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)
);
echo "UUID de versiunea 4: " . $randomUuid . "\n";

// PHP nu are o metodă încorporată pentru UUID-uri de versiunea 1
// Ar trebui să folosiți o bibliotecă precum 'ramsey/uuid' pentru asta
?>

Referințe

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. Organizația Internațională pentru Standardizare. (2005). Tehnologia informației – Interconectarea sistemelor deschise – Proceduri pentru operarea autorităților de înregistrare OSI: Generarea și înregistrarea Identificatorilor Universali Unici (UUID) și utilizarea acestora ca componente de Identificator de Obiect ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. Identificator universal unic. (2023). În Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. ID-ul Snowflake. (2023). În Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback