UUID چیست؟
یک UUID (شناسه یکتای جهانی) یک مقدار ۱۲۸ بیتی است که به صورت یک رشته ۳۶ کاراکتری مثل 550e8400-e29b-41d4-a716-446655440000 رندر میشود. فرمت و معنای نسخه توسط RFC 4122 برای v1 تا v5، و توسط RFC 9562 برای نسخههای جدیدتر v6، v7 و v8 تعریف شدهاند. این ابزار v4 (کاملاً تصادفی)، v1 (timestamp به علاوه شناسه نود تصادفی) و v7 (پیشوند timestamp میلیثانیه Unix به علاوه پسوند تصادفی، مرتبشونده بر اساس زمان تولید) را — همه در مرورگر شما، با استفاده از API Web Crypto پلتفرم — تولید میکند. هیچ دادهای به سرور ارسال نمیشود.
تولید UUID چگونه کار میکند؟
هر نسخه به صورت متفاوتی بین قطعیت، مرتبپذیری و آنتروپی معاوضه میکند. ابزار الگوریتم صحیح را بر اساس انتخاب شما انتخاب میکند:
- v4 (تصادفی)
crypto.randomUUID()مرورگر را فراخوانی میکند که ۱۲۲ بیت تصادفی رمزنگاری با ۶ بیت ثابت (نسخه0100و variant10) در موقعیتهای صحیح تنظیمشده برمیگرداند. تصادم نجومی غیرمحتمل است — برای رسیدن به یک تکرار با احتمال ۵۰٪ باید تقریباً ۲.۷۱ کویینتیلیون UUID v4 تولید کنید. - v1 (timestamp + نود) یک timestamp گرگوری ۶۰ بیتی (تیکهای ۱۰۰ نانوثانیه از ۱۵ اکتبر ۱۵۸۲) را در
time_low/time_mid/time_hi_and_versionبستهبندی میکند، nibble نسخه را روی0001تنظیم میکند، یک دنباله ساعت ۱۴ بیتی با بیتهای variant تنظیمشده انتخاب میکند، و از یک شناسه نود ۴۸ بیتی تصادفی با بیت multicast اجباری استفاده میکند. - v7 (timestamp مرتبشونده)، طبق RFC 9562 §5.7، یک timestamp بزرگانتهایی Unix-میلیثانیه ۴۸ بیتی، سپس نسخه ۴ بیتی
0111، سپس ۱۲ بیت تصادفی، سپس variant ۲ بیتی10، سپس ۶۲ بیت تصادفی دیگر قرار میدهد. چون timestamp در بیتهای مهمترین قرار دارد، UUID های v7 به ترتیب واژهنامهای بر اساس ترتیب تولید مرتب میشوند. - تمام تصادفی بودن از
crypto.getRandomValues()، RNG رمزنگاریامن مرورگر، میآید. هر دو v1 و v7 شامل یک محافظ یکنواخت درون-تیکی هستند تا دو فراخوانی متوالی در همان تیک ساعت، دومی را بالاتر از اولی مرتب کند — برای اجراهای تولید انبوه که با ساعت میلیثانیه مسابقه میدهند مهم است. - خط لوله فرمت پس از تولید اجرا میشود. میتوانید خطفاصلهها را حذف کنید، به حروف بزرگ تغییر دهید، مقدار را در آکولاد بپوشانید (
{…}— قرارداد Microsoft GUID)، یا ۱۶ بایت خام را به base64 رندر کنید (خروجی ۲۲ کاراکتری، بدون padding).
چرا از این مولد UUID استفاده کنیم؟
- هیچچیز مرورگر شما را ترک نمیکند. API Web Crypto به صورت محلی اجرا میشود؛ صفحه پس از بارگذاری اولیه سند هیچ درخواست شبکهای انجام نمیدهد. DevTools را باز کنید، Generate را کلیک کنید، و پنل Network ساکت میماند.
- خروجی صحیح بر اساس RFC. v4 از RFC 4122 §4.4، v1 از §4.2 و §4.5، و v7 از RFC 9562 §5.7 پیروی میکند. nibble نسخه و بیتهای variant جایی که استانداردها میگویند باید باشند قرار میگیرند — هر UUID در برابر regex نسخه کانونی اعتبارسنجی میشود.
- v7 مرتبشونده برای کلیدهای پایگاه داده. یک UUID v7 استفادهشده به عنوان کلید اصلی cluster شده در Postgres، MySQL یا SQL Server درجها را الحاقی بر روی index نگه میدارد — بدون شکاف صفحات، بدون I/O تصادفی — در حالی که هنوز به صورت جهانی یکتا است.
- تولید انبوه بدون محدودیت نرخ. ۱، ۱۰، ۱۰۰ یا ۱٬۰۰۰ UUID به صورت همزمان تولید کنید. هیچ سهمیهای وجود ندارد و نیازی به ثبتنام نیست — ابزار در تب شما اجرا میشود، بنابراین سقف CPU شما است، نه tier API یک vendor.
کاربردهای رایج UUID کداماند؟
UUID ها هر جا که یک سیستم نیاز به یک شناسه یکتای جهانی بدون هماهنگی با یک مرجع مرکزی دارد نمود پیدا میکنند:
- کلیدهای اصلی پایگاه داده. اعداد صحیح auto-increment تعداد سطرها را فاش میکنند و sharding را خراب میکنند. UUID ها در shards ثابت هستند، برای merge در regions ایمن هستند، و (با v7) درجهای B-tree را بدون شکاف صفحات گرم نگه میدارند.
- شناسههای همبستگی درخواست. middleware HTTP یک UUID v4 به هر درخواست ورودی پیوست میکند، آن را روی هر span لاگ میکند، و آن را به پاییندست منتقل میکند (اغلب به عنوان هدر
X-Request-Id). وقتی یک مشتری باگی گزارش میدهد، مهندس پشتیبانی ID را پیست میکند و کل ردپای درخواست — در سرویسها و مناطق زمانی — بدون ابهام ظاهر میشود. - کلیدهای idempotency. API های پرداخت (Stripe، Adyen، Square) یک هدر
Idempotency-Keyمیپذیرند تا یک درخواست تکرارشده هرگز دو بار مشتری را شارژ نکند. یک UUID تولیدشده توسط کلاینت تضمین میکند که کلید برای هر عملیات منطقی یکتا است.
یک مثال از UUID چگونه است؟
در Node.js یا یک مرورگر مدرن، یکخطی crypto.randomUUID() یک UUID v4 جدید برمیگرداند — مثلاً 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12. از آن برای یک شناسه درخواست یا یک کلید idempotency استفاده کنید. وقتی UUID قرار است به یک ستون پایگاه داده که کلید اصلی cluster شده خواهد بود برود، به جای آن v7 تولید کنید: دو مقدار v7 تولیدشده با یک میلیثانیه فاصله، مثل 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 و 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4، به ترتیب واژهنامهای بر اساس ترتیب تولید مرتب میشوند. نوع uuid Postgres هر دو نسخه را به صورت یکسان ذخیره میکند — تفاوت در زمان نوشتن index آشکار میشود.
این مولد UUID یک کار انجام میدهد: تبدیل یک کلیک به یک یا چند شناسه سازگار با RFC، با فرمت مورد نیاز شما، بدون ارسال درخواست به سرور. یک نسخه، تعداد و فرمت انتخاب کنید — تولید کنید، کپی کنید، ادامه دهید.