ساخت UUID
UUIDهای تصادفی نسخه 4 را از یک تا صد عدد در هر بار بسازید و بهصورت فهرست کپی کنید. این شناسهها با مولد تصادفی امن رمزنگاریشدهٔ مرورگر شما ساخته میشوند و بررسیکننده، نسخه و گونهٔ (variant) هر UUID را که وارد کنید نشان میدهد.
۰ نویسه · ۰ واژه · ۰ خط
کاملاً در همین زبانهٔ مرورگر اجرا میشود. متن شما هرگز آپلود یا ذخیره نمیشود.
نسخههای UUID
نسخه اولین رقم گروه سوم است؛ نوع (variant) در اولین رقم گروه چهارم کدگذاری میشود (8، 9، a یا b برای UUIDهای RFC). مثالها بردارهای آزمون RFC 9562 هستند.
| نسخه | ساختهشده از | مثال |
|---|---|---|
| v1 | برچسب زمانی گرگوری + شناسهٔ گره (MAC) | c232ab00-9414-11ec-b3c8-9f6bdeced846 |
| v3 | هش MD5 از فضای نام + نام | 5df41881-3aed-3515-88a7-2f4a814cf09e |
| v4 | 122 بیت تصادفی | 919108f7-52d1-4320-9bac-f847db4148a8 |
| v5 | هش SHA-1 از فضای نام + نام | 2ed6657d-e927-568b-95e1-2665a8aea6a2 |
| v6 | برچسب زمانی v1 با ترتیب جدید تا شناسهها بر اساس زمان مرتب شوند | 1ec9414c-232a-6b00-b3c8-9f6bdeced846 |
| v7 | میلیثانیهٔ یونیکس + بیتهای تصادفی، قابل مرتبسازی | 017f22e2-79b0-7cc3-98c4-dc0c0c07398f |
| v8 | ساختار سفارشی تعریفشده توسط برنامه | 2489e9ad-2ee2-8e00-8ec9-32d5f69181c0 |
UUID چیست و چگونه خوانده میشود
UUID (شناسهٔ یکتای جهانی؛ در نرمافزارهای مایکروسافت GUID نامیده میشود) عددی ۱۲۸ بیتی است که با ۳۲ رقم هگزادسیمال و در گروههای 8-4-4-4-12 نوشته میشود، مثلاً f47ac10b-58cc-4372-a567-0e02b2c3d479. این قالب در سال 2005 در RFC 4122 استاندارد شد؛ در ماه مه 2024 آن سند جای خود را به RFC 9562 داد که نسخههای قبلی را نگه میدارد و سه نسخهٔ جدید اضافه میکند. دو جایگاه ثابت است: رقم اول گروه سوم نسخه را نشان میدهد (عدد 4 در 4372) و رقم اول گروه چهارم واریانت را نشان میدهد که برای هر UUID مطابق RFC یکی از 8، 9، a یا b است.
نسخهٔ 4 بقیهٔ 122 بیت را با دادهی تصادفی پر میکند. این فضا چنان بزرگ است که برای رسیدن به شانس 50% برای یک تکرار باید حدود 2.7 کوینتیلیون (2.7 × 10¹⁸) شناسه بسازید؛ به همین دلیل سیستمها میتوانند شناسههای v4 را روی ماشینهای مختلف و بدون هماهنگی تولید کنند. این صفحه از crypto.randomUUID و در نبود آن از crypto.getRandomValues استفاده میکند و هرگز از Math.random بهره نمیبرد، چون خروجی آن برای غیرقابلپیشبینی بودن طراحی نشده است. گزینههای Uppercase و Without hyphens فقط قالببندی را تغییر میدهند؛ مقدار همان است و بیشتر تجزیهگرها هر دو حالت حروف را میپذیرند.
نسخهٔ v4، v7 و نسخههای دیگر
نسخههای 1 و 6 از یک مهر زمانی و شناسهٔ گره ساخته میشوند که در اصل آدرس MAC رایانه بود و محل و زمان ساخت شناسه را فاش میکند. نسخههای 3 و 5 یک فضای نام و یک نام را با MD5 یا SHA-1 هش میکنند، پس ورودی یکسان همیشه همان UUID را میدهد. نسخهٔ 8 ساختاری آزاد برای طرحهای سفارشی است. مهمترین نسخهٔ تازه نسخهٔ 7 است: با یک مهر زمانی یونیکس 48 بیتی بر حسب میلیثانیه شروع میشود و بقیه را با بیتهای تصادفی پر میکند، بنابراین شناسهها بر اساس زمان ساخت مرتب میشوند.
همین ترتیب دلیل بررسی v7 برای کلید اصلی پایگاه داده است. کلیدهای تصادفی v4 در سراسر ایندکس B-tree پخش میشوند، صفحهها را میشکنند و با بزرگ شدن جدول به محلیت حافظهٔ نهان آسیب میزنند؛ اما کلیدهای v7 تقریباً به ترتیب صعودی و مانند ستون خودافزایشی میرسند، بیآنکه به شمارندهٔ مرکزی نیاز باشد. وقتی شناسهای میخواهید که هیچ چیز، حتی زمان ساخت، را فاش نکند v4 را انتخاب کنید؛ وقتی سرعت درج و ترتیب زمانی مهم است v7 را. UUID یک شناسه است و راز نیست: برای رمز عبور و کلیدهای API از تولیدکنندهٔ رمز عبور استفاده کنید. رمزگذارها و بازرسهای بیشتر در ابزارهای توسعهدهنده هستند.
پرسشهای متداول
- آیا ممکن است دو UUID تصادفی یکسان باشند؟
- در تئوری بله، در عمل خیر. با 122 بیت تصادفی، حتی تولید یک میلیارد UUID از نوع v4 در هر ثانیه به مدت حدود 86 سال فقط حدود 50% احتمال یک برخورد میدهد، به شرط آنکه منبع تصادفی سالم باشد.
- تفاوت UUID و GUID چیست؟
- در اصل هیچ. GUID نام مایکروسافت برای همان شناسهٔ 128 بیتی است. برخی ابزارهای مایکروسافت GUID را با حروف بزرگ یا درون آکولاد نشان میدهند که بررسیکنندهٔ اینجا آن را میپذیرد.
- چگونه نسخهٔ یک UUID را تشخیص دهم؟
- به رقم اول گروه سوم نگاه کنید: 4 یعنی تصادفی، 7 یعنی مرتب بر اساس زمان، 1 یعنی مهر زمانی بهعلاوهٔ گره. آن را در Check a UUID بچسبانید تا نسخه و واریانت را ببینید.
- آیا برای کلیدهای پایگاه داده بهتر است بهجای v4 از UUIDv7 استفاده کنم؟
- اغلب بله. کلیدهای v7 بر اساس زمان مرتباند و ایندکسهای B-tree را فشرده و درج را سریع نگه میدارند. اگر نباید زمان ساخت نهفته در شناسهٔ v7 آشکار شود، همان v4 را بگذارید.
- آیا استفاده از UUID بهعنوان توکن بازنشانی رمز عبور امن است؟
- UUID نوع v4 از یک مولد امن 122 بیت تصادفی دارد که برای غیرقابلحدس بودن کافی است، اما بسیاری از کتابخانهها توابع ویژهٔ توکن با انقضای صریح دارند. هرگز نسخههای زمانمحور مانند v1 یا v7 را بهعنوان راز به کار نبرید.