Whiz Tools

تولیدکننده UUID

UUID تولید شده

ساختار UUID
زمان کم

تولید UUID

مقدمه

شناسه منحصر به فرد جهانی (UUID) یک عدد 128 بیتی است که برای شناسایی اطلاعات در سیستم‌های کامپیوتری استفاده می‌شود. UUIDها توسط بنیاد نرم‌افزار باز (OSF) به عنوان بخشی از محیط محاسبات توزیع‌شده (DCE) استاندارد شده‌اند. این شناسایی‌کننده‌ها به گونه‌ای طراحی شده‌اند که در فضا و زمان منحصر به فرد باشند و این امر آن‌ها را برای کاربردهای مختلف در سیستم‌های توزیع‌شده و فراتر از آن ایده‌آل می‌سازد.

این ابزار تولید UUID به شما امکان می‌دهد UUIDهای نسخه 1 (مبتنی بر زمان) و نسخه 4 (تصادفی) را ایجاد کنید. این شناسایی‌کننده‌ها در سناریوهای مختلفی که نیاز به شناسایی منحصر به فرد دارند، مانند کلیدهای پایگاه داده، سیستم‌های توزیع‌شده و پروتکل‌های شبکه، مفید هستند.

نحوه کار UUIDها

ساختار UUID

UUID معمولاً به عنوان 32 رقم هگزادسیمال نمایش داده می‌شود که در پنج گروه جدا شده با خط تیره، به شکل 8-4-4-4-12 برای مجموع 36 کاراکتر (32 کاراکتر الفبایی عددی و 4 خط تیره) نمایش داده می‌شود. به عنوان مثال:

550e8400-e29b-41d4-a716-446655440000

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 را نشان می‌دهد:

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

نسخه‌های UUID

چندین نسخه از UUIDها وجود دارد که هر کدام روش تولید خاص خود را دارند:

  1. نسخه 1 (مبتنی بر زمان): از زمان فعلی و آدرس MAC کامپیوتر استفاده می‌کند.
  2. نسخه 2 (امنیت DCE): مشابه نسخه 1، اما شامل یک شناسه دامنه محلی است.
  3. نسخه 3 (مبتنی بر نام، MD5): با هش کردن یک شناسه فضای نام و نام تولید می‌شود.
  4. نسخه 4 (تصادفی): با استفاده از یک تولیدکننده عدد تصادفی یا شبه تصادفی تولید می‌شود.
  5. نسخه 5 (مبتنی بر نام، SHA-1): مشابه نسخه 3، اما از هش SHA-1 استفاده می‌کند.

این ابزار بر تولید UUIDهای نسخه 1 و نسخه 4 تمرکز دارد.

فرمول

تولید UUID نسخه 1

UUIDهای نسخه 1 با استفاده از اجزای زیر تولید می‌شوند:

  1. زمان: یک مقدار 60 بیتی که تعداد دوره‌های 100 نانوثانیه از 15 اکتبر 1582 (تاریخ اصلاح تقویم گرگوری به تقویم مسیحی) را نشان می‌دهد.
  2. توالی ساعت: یک مقدار 14 بیتی که برای جلوگیری از تکرار در صورت تنظیم ساعت به عقب استفاده می‌شود.
  3. گره: یک مقدار 48 بیتی که معمولاً از آدرس MAC کامپیوتر مشتق می‌شود.

فرمول تولید UUID نسخه 1 می‌تواند به صورت زیر بیان شود:

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

تولید UUID نسخه 4

UUIDهای نسخه 4 با استفاده از یک تولیدکننده عدد تصادفی قوی از نظر رمزنگاری تولید می‌شوند. فرمول به سادگی عبارت است از:

UUID = random_128_bit_number

با تنظیم بیت‌های خاص برای نشان دادن نسخه (4) و نوع.

موارد استفاده

UUIDها کاربردهای زیادی در حوزه‌های مختلف علوم کامپیوتر و مهندسی نرم‌افزار دارند:

  1. کلیدهای پایگاه داده: UUIDها اغلب به عنوان کلیدهای اصلی در پایگاه‌های داده، به ویژه در سیستم‌های توزیع‌شده که چندین گره ممکن است به طور همزمان رکوردهایی تولید کنند، استفاده می‌شوند.

  2. سیستم‌های توزیع‌شده: در سیستم‌های توزیع‌شده بزرگ، UUIDها به شناسایی منحصر به فرد منابع، تراکنش‌ها یا رویدادها در چندین گره یا مرکز داده کمک می‌کنند.

  3. آدرس‌دهی محتوا: UUIDها می‌توانند برای ایجاد شناسه‌های منحصر به فرد برای محتوا در سیستم‌های ذخیره‌سازی با آدرس‌دهی محتوا استفاده شوند.

  4. مدیریت جلسه: برنامه‌های وب اغلب از UUIDها برای مدیریت جلسات کاربری استفاده می‌کنند و اطمینان می‌دهند که هر جلسه دارای یک شناسه منحصر به فرد است.

  5. شناسایی دستگاه‌های IoT: در برنامه‌های اینترنت اشیاء (IoT)، UUIDها می‌توانند برای شناسایی منحصر به فرد دستگاه‌های فردی در یک شبکه استفاده شوند.

جایگزین‌ها

در حالی که UUIDها به طور گسترده‌ای استفاده می‌شوند، روش‌های جایگزینی برای تولید شناسه‌های منحصر به فرد وجود دارد:

  1. شناسه‌های خودافزاینده: ساده و معمولاً در سیستم‌های پایگاه داده تک‌کاربره استفاده می‌شود، اما برای محیط‌های توزیع‌شده مناسب نیست.

  2. شناسه‌های مبتنی بر زمان: می‌توانند برای داده‌های زمان‌دار مفید باشند اما ممکن است در سناریوهای با هم‌زمانی بالا با مشکلات تکراری مواجه شوند.

  3. شناسه‌های Snowflake: توسط توییتر توسعه یافته‌اند، این شناسه‌ها ترکیبی از زمان و شماره کارگر را برای تولید شناسه‌های منحصر به فرد در سیستم‌های توزیع‌شده تولید می‌کنند.

  4. ULID (شناسه جهانی منحصر به فرد و به صورت ترتیبی قابل مرتب‌سازی): یک جایگزین جدیدتر که هدف آن انسانی‌تر و قابل مرتب‌سازی‌تر از UUIDها است.

تاریخچه

مفهوم UUIDها برای اولین بار در سیستم محاسبات شبکه‌ای آپولو معرفی شد و سپس توسط بنیاد نرم‌افزار باز (OSF) به عنوان بخشی از محیط محاسبات توزیع‌شده (DCE) در دهه 1990 استاندارد شد. مشخصات اولیه در سال 1997 به عنوان ISO/IEC 11578:1996 منتشر شد و سپس در سال 2005 به عنوان بخشی از ISO/IEC 9834-8:2005 تجدید نظر شد.

مراحل کلیدی در تاریخ UUID:

  • دهه 1980: کامپیوتر آپولو مفهوم UUID را برای سیستم محاسبات شبکه‌ای خود توسعه می‌دهد.
  • 1997: اولین مشخصات UUID به عنوان ISO/IEC 11578:1996 منتشر می‌شود.
  • 2005: مشخصات UUID تجدید نظر شده و به عنوان بخشی از ISO/IEC 9834-8:2005 منتشر می‌شود.
  • 2009: RFC 4122 فرمت UUID و الگوریتم‌های تولید مورد استفاده در حال حاضر را تعریف می‌کند.

با گذشت زمان، UUIDها به ابزاری ضروری در سیستم‌های توزیع‌شده و طراحی پایگاه داده تبدیل شده‌اند و پیاده‌سازی‌ها و سازگاری‌های مختلفی در زبان‌های برنامه‌نویسی و پلتفرم‌های مختلف دارند.

مثال‌های کد

در اینجا مثال‌هایی از تولید UUIDها در زبان‌های برنامه‌نویسی مختلف آورده شده است:

import uuid

## تولید UUID نسخه 4 (تصادفی)
random_uuid = uuid.uuid4()
print(f"UUID نسخه 4: {random_uuid}")

## تولید UUID نسخه 1 (مبتنی بر زمان)
time_based_uuid = uuid.uuid1()
print(f"UUID نسخه 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// تولید UUID نسخه 4 (تصادفی)
const randomUuid = uuidv4();
console.log(`UUID نسخه 4: ${randomUuid}`);

// تولید UUID نسخه 1 (مبتنی بر زمان)
const timeBasedUuid = uuidv1();
console.log(`UUID نسخه 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // تولید UUID نسخه 4 (تصادفی)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID نسخه 4: " + randomUuid);

        // تولید UUID نسخه 1 (مبتنی بر زمان)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID نسخه 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## تولید UUID نسخه 4 (تصادفی)
random_uuid = SecureRandom.uuid
puts "UUID نسخه 4: #{random_uuid}"

## Ruby دارای یک روش داخلی برای UUIDهای نسخه 1 نیست
## شما باید از یک جواهر مانند 'uuidtools' برای آن استفاده کنید
<?php
// تولید UUID نسخه 4 (تصادفی)
$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 نسخه 4: " . $randomUuid . "\n";

// PHP دارای یک روش داخلی برای UUIDهای نسخه 1 نیست
// شما باید از یک کتابخانه مانند 'ramsey/uuid' برای آن استفاده کنید
?>

منابع

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. سازمان بین‌المللی استانداردسازی. (2005). فناوری اطلاعات – ارتباطات سیستم‌های باز – رویه‌های عملیاتی مقامات ثبت‌نام OSI: تولید و ثبت شناسه‌های منحصر به فرد جهانی (UUIDها) و استفاده از آن‌ها به عنوان اجزای شناسه شی ASN.1. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
  3. شناسه منحصر به فرد جهانی. (2023). در ویکی‌پدیا. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. شناسه Snowflake. (2023). در ویکی‌پدیا. https://en.wikipedia.org/wiki/Snowflake_ID
  5. مشخصات ULID. (بدون تاریخ). گیت‌هاب. https://github.com/ulid/spec
Feedback