Generator UUID - Twórz unikalne identyfikatory UUID
Generuj Uniwersalnie Unikalne Identyfikatory (UUID) do różnych aplikacji. Twórz zarówno wersję 1 (opartą na czasie), jak i wersję 4 (losową) UUID do użycia w systemach rozproszonych, bazach danych i nie tylko.
Generator UUID
Wygenerowany UUID
Dokumentacja
Generator UUID
Wprowadzenie
Uniwersalny Unikalny Identifikator (UUID) to 128-bitowa liczba używana do identyfikacji informacji w systemach komputerowych. UUID są standaryzowane przez Open Software Foundation (OSF) jako część Środowiska Rozproszonego Obliczeń (DCE). Te identyfikatory są zaprojektowane tak, aby były unikalne zarówno w przestrzeni, jak i czasie, co czyni je idealnymi do różnych zastosowań w systemach rozproszonych i nie tylko.
To narzędzie do generowania UUID pozwala na tworzenie zarówno wersji 1 (opartej na czasie), jak i wersji 4 (losowej) UUID. Te identyfikatory są przydatne w różnych scenariuszach, w których wymagana jest unikalna identyfikacja, takich jak klucze bazy danych, systemy rozproszone i protokoły sieciowe.
Jak działają UUID
Struktura UUID
UUID jest zazwyczaj reprezentowany jako 32 cyfry szesnastkowe, wyświetlane w pięciu grupach oddzielonych myślnikami, w formacie 8-4-4-4-12, co daje łącznie 36 znaków (32 znaki alfanumeryczne i 4 myślniki). Na przykład:
1550e8400-e29b-41d4-a716-446655440000
2
128 bitów UUID jest podzielonych na konkretne pola, z których każde niesie różne informacje w zależności od wersji UUID:
- 32 bity dla pola time_low
- 16 bitów dla pola time_mid
- 16 bitów dla pola time_hi_and_version
- 8 bitów dla pola clock_seq_hi_and_reserved
- 8 bitów dla pola clock_seq_low
- 48 bitów dla pola node
Oto diagram ilustrujący strukturę UUID:
Wersje UUID
Istnieje kilka wersji UUID, z których każda ma swoją metodę generacji:
- Wersja 1 (oparta na czasie): Używa aktualnego znacznika czasu i adresu MAC komputera.
- Wersja 2 (bezpieczeństwo DCE): Podobna do wersji 1, ale zawiera identyfikator lokalnej domeny.
- Wersja 3 (oparta na nazwie, MD5): Generowana przez hashowanie identyfikatora przestrzeni nazw i nazwy.
- Wersja 4 (losowa): Generowana przy użyciu losowego lub pseudo-losowego numeru.
- Wersja 5 (oparta na nazwie, SHA-1): Podobna do wersji 3, ale używa haszowania SHA-1.
To narzędzie koncentruje się na generowaniu UUID wersji 1 i wersji 4.
Formuła
Generowanie UUID Wersji 1
UUID wersji 1 są generowane przy użyciu następujących komponentów:
- Znacznik czasu: 60-bitowa wartość reprezentująca liczbę 100-nanosekundowych interwałów od 15 października 1582 roku (data reformy gregoriańskiej kalendarza chrześcijańskiego).
- Sekwencja zegara: 14-bitowa wartość używana do unikania duplikatów w przypadku, gdy zegar jest ustawiony wstecz.
- Węzeł: 48-bitowa wartość, zazwyczaj pochodząca z adresu MAC komputera.
Formuła generowania UUID wersji 1 może być wyrażona jako:
1UUID = (znacznik_czasu * 2^64) + (sekwencja_zegara * 2^48) + węzeł
2
Generowanie UUID Wersji 4
UUID wersji 4 są generowane przy użyciu kryptograficznie silnego generatora liczb losowych. Formuła jest po prostu:
1UUID = losowa_liczba_128_bitowa
2
Z określonymi bitami ustawionymi, aby wskazać wersję (4) i wariant.
Przykłady użycia
UUID mają liczne zastosowania w różnych dziedzinach informatyki i inżynierii oprogramowania:
-
Klucze bazy danych: UUID są często używane jako klucze główne w bazach danych, szczególnie w systemach rozproszonych, gdzie wiele węzłów może jednocześnie generować rekordy.
-
Systemy rozproszone: W dużych systemach rozproszonych UUID pomagają w unikalnej identyfikacji zasobów, transakcji lub zdarzeń w wielu węzłach lub centrach danych.
-
Adresowanie zawartości: UUID mogą być używane do tworzenia unikalnych identyfikatorów dla zawartości w systemach przechowywania adresowalnej zawartości.
-
Zarządzanie sesjami: Aplikacje internetowe często używają UUID do zarządzania sesjami użytkowników, zapewniając, że każda sesja ma unikalny identyfikator.
-
Identyfikacja urządzeń IoT: W aplikacjach Internetu Rzeczy (IoT) UUID mogą być używane do unikalnej identyfikacji poszczególnych urządzeń w sieci.
Alternatywy
Chociaż UUID są szeroko stosowane, istnieją alternatywne podejścia do generowania unikalnych identyfikatorów:
-
Identyfikatory autoinkrementacyjne: Proste i powszechnie stosowane w systemach z jedną bazą danych, ale nieodpowiednie dla środowisk rozproszonych.
-
Identyfikatory oparte na znaczniku czasu: Mogą być przydatne dla danych uporządkowanych czasowo, ale mogą napotykać problemy z kolizjami w scenariuszach o wysokiej współbieżności.
-
Identyfikatory Snowflake: Opracowane przez Twittera, te identyfikatory łączą znacznik czasu i numer roboczy, aby generować unikalne identyfikatory w systemach rozproszonych.
-
ULID (Uniwersalny Unikalny Identyfikator Sortowalny Leksykograficznie): Nowsza alternatywa, która ma być bardziej przyjazna dla ludzi i sortowalna niż UUID.
Historia
Koncepcja UUID została po raz pierwszy wprowadzona w Apollo Network Computing System, a następnie standaryzowana przez Open Software Foundation (OSF) jako część Środowiska Rozproszonego Obliczeń (DCE) w latach 90-tych. Początkowa specyfikacja została opublikowana w 1997 roku jako ISO/IEC 11578:1996, a następnie zrewidowana w 2005 roku jako część ISO/IEC 9834-8:2005.
Kluczowe wydarzenia w historii UUID:
- Lata 80.: Apollo Computer rozwija koncepcję UUID dla swojego systemu obliczeń sieciowych.
- 1997: Pierwsza specyfikacja UUID opublikowana jako ISO/IEC 11578:1996.
- 2005: Specyfikacja UUID zrewidowana i opublikowana jako część ISO/IEC 9834-8:2005.
- 2009: RFC 4122 definiuje format UUID i algorytmy generacji używane dzisiaj.
Z biegiem czasu UUID stały się niezbędnym narzędziem w systemach rozproszonych i projektowaniu baz danych, z różnymi implementacjami i adaptacjami w różnych językach programowania i platformach.
Przykłady kodu
Oto przykłady generowania UUID w różnych językach programowania:
1import uuid
2
3## Generowanie UUID wersji 4 (losowego)
4random_uuid = uuid.uuid4()
5print(f"UUID wersji 4: {random_uuid}")
6
7## Generowanie UUID wersji 1 (opartego na czasie)
8time_based_uuid = uuid.uuid1()
9print(f"UUID wersji 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// Generowanie UUID wersji 4 (losowego)
4const randomUuid = uuidv4();
5console.log(`UUID wersji 4: ${randomUuid}`);
6
7// Generowanie UUID wersji 1 (opartego na czasie)
8const timeBasedUuid = uuidv1();
9console.log(`UUID wersji 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // Generowanie UUID wersji 4 (losowego)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID wersji 4: " + randomUuid);
8
9 // Generowanie UUID wersji 1 (opartego na czasie)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID wersji 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## Generowanie UUID wersji 4 (losowego)
4random_uuid = SecureRandom.uuid
5puts "UUID wersji 4: #{random_uuid}"
6
7## Ruby nie ma wbudowanej metody dla UUID wersji 1
8## Należy użyć gemu takiego jak 'uuidtools' do tego
9
1<?php
2// Generowanie UUID wersji 4 (losowego)
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 wersji 4: " . $randomUuid . "\n";
11
12// PHP nie ma wbudowanej metody dla UUID wersji 1
13// Należy użyć biblioteki takiej jak 'ramsey/uuid' do tego
14?>
15
Odniesienia
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- Międzynarodowa Organizacja Normalizacyjna. (2005). Technologie informacyjne – Otwarte systemy łączności – Procedury działania organów rejestracyjnych OSI: Generacja i rejestracja Uniwersalnych Unikalnych Identyfikatorów (UUID) oraz ich użycie jako komponentów identyfikatorów obiektów ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Uniwersalny unikalny identyfikator. (2023). W Wikipedii. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Identyfikator Snowflake. (2023). W Wikipedii. https://en.wikipedia.org/wiki/Snowflake_ID
- Specyfikacja ULID. (n.d.). GitHub. https://github.com/ulid/spec
Opinie
Kliknij powiadomienie o opinii, aby rozpocząć przesyłanie opinii o tym narzędziu
Powiązane narzędzia
Odkryj więcej narzędzi, które mogą być przydatne w Twoim przepływie pracy