فهرست

جست‌وجوی ابزارهاگزارش تغییرات

برای جابه‌جایی برای باز کردنمسئله را توضیح دهید، نه نام ابزار را

مولد دسته‌ای UUID

برای هر شناسه ۱۶ بایت تصادفی رمزنگاری برمی‌دارد، بیت‌های نسخه و واریانت RFC ۹۵۶۲ را جایگزین می‌کند و تا ۱۰٬۰۰۰ مقدار UUID نسخهٔ ۴ را به‌صورت جدولی قابل‌کپی با یک فایل CSV قابل دانلود ارائه می‌کند.

یک تا ۱۰٬۰۰۰ UUID مستقل نسخهٔ ۴. جدول را می‌توان کپی یا به‌صورت CSV دانلود کرد.

۱۲۸ بیت زیرین یکسان است؛ فقط نمایش متنی آن‌ها تغییر می‌کند.

UUIDهای تولیدشده
۲۰
بیت‌های تصادفی در هر UUID
۱۲۲
موارد تکراری در این دسته
۰
نمایش
متعارف، حروف کوچک

UUIDهای تولیدشده

۱d7542c98-dce5-4ca8-8a36-fb4f421ec793
۲e79427e2-d06c-4883-85b0-28e18de64943
۳12d075d6-986a-48c8-9896-3ce131ff15ce
۴2fd5ba3d-e5a0-4a75-96a4-302fd1dc1abf
۵e97772c2-8524-4c17-899d-41938d1cf24f
۶b0cf62f3-fdbf-4e5e-abc5-06089e631e63
۷8bde81b3-feb5-4daa-a0a1-986c29b54bcf
۸2603ca14-0ca2-4fcb-bbbd-92c3153260d8
۹18b68e68-8d9e-4ed6-b13f-65028fb7d2fc
۱۰9b8a92c0-39ab-48ca-ad8a-d205a19491f7
۱۱77a0a13e-ea04-4533-81f9-5a8a71b25c80
۱۲7f107f6c-df76-47e6-b439-52be7cee4587
۱۳d98e1aad-71b7-43d4-8b61-d4e08d100d31
۱۴168b6743-2f17-400c-adfa-8323c3edcd74
۱۵e4f619d1-6f26-400a-999e-a2d8db933534
۱۶367a1870-95a3-4956-8639-3a3ab24d2eee
۱۷716616cf-9c85-4db8-b1f1-e6b7a072a895
۱۸861701f4-885d-41d0-a014-387854e93c87
۱۹d576c3f4-e8ed-4365-a9be-60d5a73525c5
۲۰daee94d2-6357-4356-aa43-eb9516792c2a

نتیجه‌ها بدون تضمین درستی ارائه می‌شوند. روش و منابع در پایین صفحه منتشر شده‌اند تا بتوانید محاسبه را بررسی کنید.

چگونگی کار

این ابزار چه چیزی را محاسبه می‌کند

UUID نسخهٔ ۴ یک شناسهٔ ۱۲۸ بیتی است که محتوایش به‌جز شش بیت که چیدمان آن را مشخص می‌کنند، تصادفی است. مهر زمانی، آدرس دستگاه یا شمارندهٔ پایگاه داده در آن نیست. به همین دلیل سامانه‌های مستقل می‌توانند بدون هماهنگی با یک سرویس مرکزی مقدار تولید کنند.

این ابزار به‌جای یک رشتهٔ تزئینی، یک دسته می‌سازد. هر UUID تولیدشده یک ردیف جدول است، بنابراین نتیجه را می‌توان کپی کرد، برای یافتن تکراری بررسی کرد، یا به‌صورت CSV دانلود کرد و به‌عنوان دادهٔ اولیه، شناسهٔ فیکسچرها یا کلیدهای درون‌ریزی به کار برد.

روش

RFC ۹۵۶۲ به پیاده‌سازی اجازه می‌دهد ابتدا همهٔ ۱۲۸ بیت را بردارد و سپس فیلدهای نسخه و واریانت را جایگزین کند. به‌صورت اکتت‌های با شاخص از صفر:

octet 6 = (random octet 6 AND 00001111) OR 01000000
octet 8 = (random octet 8 AND 00111111) OR 10000000

عبارت اول نیبل بالای اکتت ۶ را به 4 هگزادسیمال وامی‌دارد. عبارت دوم دو بیت پرارزش اکتت ۸ را به 10 دودویی وامی‌دارد، بنابراین اولین رقم هگزادسیمال آن 8، 9، a یا b است. همهٔ بیت‌های دیگر و بیت‌های پایینی که این ماسک‌ها نگه می‌دارند تصادفی می‌مانند: در مجموع ۱۲۲ بیت.

Web Crypto هر درخواست getRandomValues را به ۶۵٬۵۳۶ بایت محدود می‌کند. بزرگ‌ترین دسته ۱۶۰٬۰۰۰ بایت دارد، بنابراین پیاده‌سازی به‌جای تکیه بر درخواستی که پلتفرم باید رد کند، تخصیص را در تکه‌های محدود پر می‌کند.

پیش از ادامهٔ مطلب

در یک UUID متعارف، کدام جفت رقم آغازین گروه سوم و گروه چهارم هم نسخهٔ ۴ و هم واریانت RFC را درست نشان می‌دهد؟

  • واریانت درست است، اما رقم آغازین گروه سوم نسخهٔ ۳ را نشان می‌دهد.

  • نسخه درست است، اما رقم ۷ با بیت‌های واریانت ۰۱ شروع می‌شود، نه ۱۰.

  • بله. گروه سوم با ۴ شروع می‌شود و a با ۱۰ دودویی آغاز می‌شود.

گروه سوم با ۴ و گروه چهارم با a. نسخهٔ ۴ نیبل اول گروه سوم را اشغال می‌کند؛ واریانت RFC به‌صورت ۸، ۹، a یا b در ابتدای گروه چهارم دیده می‌شود.

یک نمونهٔ کارشده از چیدمان بیت‌ها

آزمون‌ها به یک منبع بایت تکرارپذیر نیاز دارند، هرچند مولد واقعی نباید چنین باشد. دادن ۱۶ بایت 00 01 02 ... 0f به الگوریتم نوشته‌شده این نتیجه را می‌دهد:

random:  00010203-0405-0607-0809-0a0b0c0d0e0f
UUIDv4:  00010203-0405-4607-8809-0a0b0c0d0e0f
                         ^    ^
                      version variant

فقط بیت‌های بالای لازم در اکتت‌های ۶ و ۸ تغییر کردند. آزمون فرمول آن بردار کامل را تأیید می‌کند، سپس از منبع واقعی Web Crypto برای ۱۰۰ UUID استفاده می‌کند و هر مقدار را با دستور زبان نسخه/واریانت می‌سنجد. آزمون دیگری سقف کامل ۱۰٬۰۰۰ ردیف را تولید می‌کند و ثابت می‌کند هیچ درخواست تصادفی از ۶۵٬۵۳۶ بایت فراتر نمی‌رود.

شکل‌های متعارف، فشرده و URN

نمایش آشنا ۳۲ رقم هگزادسیمال را به‌صورت 8-4-4-4-12 گروه‌بندی می‌کند:

00010203-0405-4607-8809-0a0b0c0d0e0f

متن فشرده چهار خط تیره را حذف می‌کند. متن URN به مقدار متعارف پیشوند می‌دهد:

urn:uuid:00010203-0405-4607-8809-0a0b0c0d0e0f

حروف بزرگ، a تا f را به A تا F تبدیل می‌کند. هیچ‌یک از این عملیات بیتی از UUID را تغییر نمی‌دهد؛ این‌ها قراردادهای قالب‌بندی برای سامانه‌ای هستند که فهرست را مصرف می‌کند.

احتمال برخورد، با بیان صادقانه

2^122 محتوای تصادفی ممکن وجود دارد. برای n UUID با تولید یکنواخت، تقریب روز تولد برای دست‌کم یک برخورد چنین است:

p ≈ n × (n - 1) / (2 × 2^122)

برای ۱۰٬۰۰۰ مقدار این رقم تقریباً ۹٫۴ × ۱۰^-۳۰ است. ناچیز به معنای صفر نیست و مولد رمزنگاری همچنان یک وابستگی پیاده‌سازی است. شمارندهٔ تکراری‌های جدول، تکرار درون همین دسته را می‌گیرد، در حالی که قید یکتایی پایگاه داده مرجع نهایی درست در همهٔ دسته‌ها و سامانه‌ها باقی می‌ماند.

کاری که انجام نمی‌دهد

مقادیر UUID نسخهٔ ۷ مرتب بر حسب زمان، مقادیر UUID نسخهٔ ۵ قطعی مبتنی بر نام، یا کدگذاری‌های دودویی مخصوص پایگاه داده تولید نمی‌کند. همچنین قول نمی‌دهد که یک UUID محرمانه، امضاشده یا مقاوم در برابر دست‌کاری باشد. تنها کارش یک دستهٔ استاندارد از شناسه‌های نسخهٔ ۴ با تصادفی‌سازی رمزنگاری است.

مراحل انجام کار

  1. اندازهٔ دسته را به‌صورت عددی صحیح از ۱ تا ۱۰٬۰۰۰ اعتبارسنجی کنید. برای هر UUID ۱۶ بایت اختصاص دهید و آن‌ها را از Web Crypto در فراخوانی‌هایی نه بزرگ‌تر از سهمیهٔ ۶۵٬۵۳۶ بایتی آن پر کنید.
  2. در اکتت ۶، چهار بیت تصادفی پایین را نگه دارید و چهار بیت بالا را با ۰۱۰۰، یعنی فیلد نسخهٔ ۴، جایگزین کنید. در اکتت ۸، شش بیت تصادفی پایین را نگه دارید و دو بیت بالا را با ۱۰، یعنی واریانت RFC، جایگزین کنید.
  3. ۱۶ اکتت را به‌صورت ۳۲ رقم هگزادسیمال بنویسید. شکل متعارف خط تیره‌ها را در گروه‌بندی ۸-۴-۴-۴-۱۲ درج می‌کند؛ شکل فشرده آن‌ها را حذف می‌کند؛ URN پیشوند urn:uuid را اضافه می‌کند. بزرگی و کوچکی حروف هیچ بیتی را تغییر نمی‌دهد.
  4. مقادیر متعارف را درون دستهٔ فعلی مقایسه کنید و هر تکراری را که واقعاً دیده شده گزارش دهید. هر مقدار را به‌صورت یک ردیف نتیجهٔ ثابت ارائه دهید که بتوان آن را کپی یا به‌صورت CSV دانلود کرد.

فرض‌ها

  • هر UUID از بایت‌های تصادفی رمزنگاری مرورگر شروع می‌شود، نه از Math.random و نه از seed قابل‌مشاهده برای کاربر. شش بیت ساختاری، ۱۲۲ بیت تصادفی در هر مقدار باقی می‌گذارند.
  • UUIDهای تصادفی برخورد را فوق‌العاده بعید می‌کنند؛ اما ضمانت ریاضی یکتایی نمی‌دهند. شمار تکراری‌های دسته یک مشاهده است، نه اثباتی در برابر مقداری که جای دیگری تولید شده.
  • UUIDها شناسه هستند، نه رازهای احراز هویت. RFC ۹۵۶۲ می‌گوید نباید فرض کرد حدس زدن آن‌ها دشوار است یا صرفِ در اختیار داشتن آن‌ها را مجوز دسترسی دانست.
  • مقادیر تولیدشده در URL قرار نمی‌گیرند، در تنظیمات کاتالوگ ذخیره نمی‌شوند و به سرور فرستاده نمی‌شوند. محاسبهٔ دوباره عمداً دستهٔ جدیدی تولید می‌کند.

پرسش‌های رایج

آیا UUIDهای تولیدشده در این صفحه به سرور فرستاده می‌شوند؟

خیر. Web Crypto بایت‌های تصادفی را در همین مرورگر پر می‌کند، بیت‌های نسخه و واریانت به‌صورت محلی تنظیم می‌شوند و جدول فقط در نتیجهٔ رندرشده وجود دارد. اگر استفادهٔ عادی از ابزار درخواستی به مبدأ دیگری بفرستد، آزمون مرورگری تولیدشده شکست می‌خورد.

یک UUID نسخهٔ ۴ چند بیت تصادفی دارد؟

۱۲۲ بیت. یک UUID در مجموع ۱۲۸ بیت دارد؛ چهار بیت نسخهٔ ۴ و دو بیت واریانت RFC را مشخص می‌کنند. RFC ۹۵۶۲ ۱۲۲ بیت دیگر را به دادهٔ تصادفی اختصاص می‌دهد.

آیا ممکن است دو مقدار UUID نسخهٔ ۴ یکسان باشند؟

در اصل بله، چون تولید تصادفی است، اما فضا ۲^۱۲۲ حالت دارد. این احتمال در اندازه‌های دستهٔ معمولی بسیار ناچیز می‌ماند و این صفحه اگر تکراری‌ای درون فهرست فعلی رخ دهد آن را گزارش می‌کند.

آیا متن فشرده یا با حروف بزرگ UUID شناسهٔ متفاوتی است؟

خیر. خط تیره‌ها، بزرگی و کوچکی حروف هگزادسیمال و پیشوند urn:uuid نمایش‌هایی پیرامون همان ۱۲۸ بیت هستند. از شکلی استفاده کنید که پایگاه داده یا API دریافت‌کننده انتظار دارد.

آیا می‌توان UUID نسخهٔ ۴ را به‌عنوان کلید API یا گذرواژه به کار برد؟

خیر. RFC ۹۵۶۲ به‌صراحت هشدار می‌دهد که نباید فرض کرد حدس زدن UUIDها دشوار است یا در اختیار داشتن آن‌ها را مجوز دسترسی دانست. یک راز اختصاصی با طول و قواعد نگهداری مناسب احراز هویت تولید کنید.

منابع

  • RFC 9562: Universally Unique IDentifiers (UUIDs)RFC Editor / Internet Engineering Task Forceبررسی‌شده در مربوط به مسیر استانداردها، مه ۲۰۲۴
  • Web Cryptography Level 2World Wide Web Consortiumبررسی‌شده در مربوط به پیش‌نویس توصیهٔ نامزد، آوریل ۲۰۲۵