Генератор на UUID за уникални идентификатори и приложения
Генерирайте универсално уникални идентификатори (UUID) за различни приложения. Създайте както версия 1 (базирана на време), така и версия 4 (случайна) UUID за използване в разпределени системи, бази данни и други.
Генератор на UUID
Генериран UUID
Документация
Генератор на UUID
Въведение
Универсалният уникален идентификатор (UUID) е 128-битов номер, използван за идентифициране на информация в компютърни системи. UUID-ите са стандартизирани от Open Software Foundation (OSF) като част от Distributed Computing Environment (DCE). Тези идентификатори са проектирани да бъдат уникални както в пространството, така и във времето, което ги прави идеални за различни приложения в разпределени системи и извън тях.
Този инструмент за генериране на UUID позволява създаването както на версия 1 (основана на време), така и на версия 4 (случайна) UUID. Тези идентификатори са полезни в различни сценарии, където е необходимо уникално идентифициране, като ключове в бази данни, разпределени системи и мрежови протоколи.
Как работят UUID-ите
Структура на UUID
UUID обикновено се представя като 32 шестнадесетични цифри, показани в пет групи, разделени с тирета, във формата 8-4-4-4-12 за общо 36 символа (32 алфанумерични символа и 4 тирета). Например:
1550e8400-e29b-41d4-a716-446655440000
2
128-те бита на UUID са разделени на специфични полета, всяко от които носи различна информация в зависимост от версията на UUID:
- 32 бита за полето time_low
- 16 бита за полето time_mid
- 16 бита за полето time_hi_and_version
- 8 бита за полето clock_seq_hi_and_reserved
- 8 бита за полето clock_seq_low
- 48 бита за полето node
Ето диаграма, илюстрираща структурата на UUID:
Версии на UUID
Съществуват няколко версии на UUID, всяка с различен метод на генериране:
- Версия 1 (основана на време): Използва текущата времева отметка и MAC адреса на компютъра.
- Версия 2 (DCE Security): Подобна на версия 1, но включва локален домейн идентификатор.
- Версия 3 (основана на име, MD5): Генерира се чрез хеширане на идентификатор на пространство и име.
- Версия 4 (случайна): Генерира се с помощта на случайно или псевдослучайно число.
- Версия 5 (основана на име, SHA-1): Подобна на версия 3, но използва SHA-1 хеширане.
Този инструмент се фокусира върху генерирането на версия 1 и версия 4 UUID.
Формула
Генериране на UUID версия 1
UUID-ите версия 1 се генерират с помощта на следните компоненти:
- Времева отметка: 60-битова стойност, представляваща броя на 100-наносекундни интервали от 15 октомври 1582 г. (датата на реформата на Григорианския календар).
- Последователност на часовника: 14-битова стойност, използвана за избягване на дубликати в случай, че часовникът бъде настроен назад.
- Възел: 48-битова стойност, обикновено извлечена от MAC адреса на компютъра.
Формулата за генериране на UUID версия 1 може да бъде изразена като:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
Генериране на UUID версия 4
UUID-ите версия 4 се генерират с помощта на криптографски силен генератор на случайни числа. Формулата е просто:
1UUID = random_128_bit_number
2
С конкретни битове, зададени за индикация на версията (4) и варианта.
Приложения
UUID-ите имат многобройни приложения в различни области на компютърните науки и софтуерното инженерство:
-
Ключове в бази данни: UUID-ите често се използват като основни ключове в бази данни, особено в разпределени системи, където множество възли могат да генерират записи едновременно.
-
Разпределени системи: В големи разпределени системи UUID-ите помагат в уникалното идентифициране на ресурси, транзакции или събития в множество възли или центрове за данни.
-
Адресиране на съдържание: UUID-ите могат да се използват за създаване на уникални идентификатори за съдържание в системи за адресируемо съдържание.
-
Управление на сесии: Уеб приложенията често използват UUID-ите за управление на потребителските сесии, осигурявайки уникален идентификатор за всяка сесия.
-
Идентификация на устройства IoT: В приложенията на Интернет на нещата (IoT) UUID-ите могат да се използват за уникално идентифициране на отделни устройства в мрежа.
Алтернативи
Въпреки че UUID-ите са широко използвани, съществуват алтернативни подходи за генериране на уникални идентификатори:
-
Автоинкрементиращи ID: Прости и обикновено използвани в системи с единична база данни, но не са подходящи за разпределени среди.
-
ID на базата на времева отметка: Могат да бъдат полезни за данни, подредени по време, но могат да срещнат проблеми с колизията в сценарии с висока конкуренция.
-
Snowflake ID: Разработени от Twitter, тези ID комбинират времева отметка и номер на работника, за да генерират уникални ID в разпределени системи.
-
ULID (Универсално уникално лексикографски подредено идентификатор): По-нов алтернативен вариант, който цели да бъде по-човешки приятелски и подреден от UUID-ите.
История
Концепцията за UUID-ите беше първоначално представена в системата за мрежово компютри на Apollo и по-късно стандартизирана от Open Software Foundation (OSF) като част от Distributed Computing Environment (DCE) през 90-те години. Първата спецификация беше публикувана през 1997 г. като ISO/IEC 11578:1996 и по-късно преразгледана през 2005 г. като част от ISO/IEC 9834-8:2005.
Ключови етапи в историята на UUID:
- 1980-те: Apollo Computer разработва концепцията за UUID за своята система за мрежово компютри.
- 1997: Публикувана е първата спецификация на UUID като ISO/IEC 11578:1996.
- 2005: Спецификацията на UUID е преразгледана и публикувана като част от ISO/IEC 9834-8:2005.
- 2009: RFC 4122 определя формата на UUID и алгоритмите за генериране, използвани днес.
С времето UUID-ите станаха основен инструмент в разпределените системи и проектирането на бази данни, с различни реализации и адаптации в различни програмни езици и платформи.
Примери за код
Ето примери за генериране на UUID в различни програмни езици:
1import uuid
2
3## Генериране на UUID версия 4 (случайна)
4random_uuid = uuid.uuid4()
5print(f"UUID версия 4: {random_uuid}")
6
7## Генериране на UUID версия 1 (основана на време)
8time_based_uuid = uuid.uuid1()
9print(f"UUID версия 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// Генериране на UUID версия 4 (случайна)
4const randomUuid = uuidv4();
5console.log(`UUID версия 4: ${randomUuid}`);
6
7// Генериране на UUID версия 1 (основана на време)
8const timeBasedUuid = uuidv1();
9console.log(`UUID версия 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // Генериране на UUID версия 4 (случайна)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID версия 4: " + randomUuid);
8
9 // Генериране на UUID версия 1 (основана на време)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID версия 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## Генериране на UUID версия 4 (случайна)
4random_uuid = SecureRandom.uuid
5puts "UUID версия 4: #{random_uuid}"
6
7## Ruby няма вградена функция за UUID версия 1
8## Трябва да използвате библиотека като 'uuidtools' за това
9
1<?php
2// Генериране на UUID версия 4 (случайна)
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 версия 4: " . $randomUuid . "\n";
11
12// PHP няма вградена функция за UUID версия 1
13// Трябва да използвате библиотека като 'ramsey/uuid' за това
14?>
15
Източници
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (н.д.). GitHub. https://github.com/ulid/spec
Обратна връзка
Щракнете върху тост за обратна връзка, за да започнете да давате обратна връзка за този инструмент
Свързани инструменти
Открийте още инструменти, които могат да бъдат полезни за вашия работен процес