ابزار رایگان · بدون ثبت‌نام

فقط در مرورگر شما؛ چیزی ارسال نمی‌شود

تولید UUID آنلاین (نسخهٔ ۴ و ۷)

UUID نسخهٔ ۴ کاملاً تصادفی یا نسخهٔ ۷ مرتب‌شده با زمان بسازید؛ تا ۱۰۰ شناسه در یک بار، با کپی تکی یا گروهی. در بخش دوم هم هر UUID را بررسی کنید تا نسخه، اعتبار و زمان ساختش معلوم شود.

نسخه
قالب نمایش

شناسهٔ

به ترتیب ساخت مرتب‌اند

بررسی و تشخیص نسخهٔ UUID

با یا بدون خط تیره، داخل آکولاد یا با پیشوند urn:uuid:؛ حروف بزرگ و کوچک فرقی ندارد. Esc ورودی را پاک می‌کند.

یک UUID بچسبانید تا نسخه، گونه و (در نسخه‌های ۱، ۶ و ۷) زمان ساخت آن نمایش داده شود.

راهنمای کامل

راهنمای کامل UUID: نسخهٔ ۴، نسخهٔ ۷ و انتخاب شناسهٔ مناسب

UUID شناسه‌ای ۱۲۸ بیتی است که بدون هماهنگی با هیچ سرور مرکزی ساخته می‌شود و با این حال عملاً یکتاست. همین ویژگی آن را به انتخاب رایج برای کلید رکوردهای پایگاه داده، شناسهٔ درخواست در لاگ، نام فایل‌های آپلودی و شناسهٔ پیام در سامانه‌های توزیع‌شده تبدیل کرده است. ابزار تولید UUID ایران‌کلاد دو نسخهٔ پرکاربرد را می‌سازد: نسخهٔ ۴ که کاملاً تصادفی است و نسخهٔ ۷ که بر اساس زمان مرتب می‌شود. این راهنما توضیح می‌دهد این دو چه تفاوتی دارند، کدام برای کار شما مناسب‌تر است و در پایگاه داده چطور باید آن‌ها را ذخیره کرد.

۹ بخش حدود ۹ دقیقه مطالعه

فهرست مطالب

UUID چیست و ساختار آن چگونه است؟

UUID مخفف Universally Unique Identifier است و در دنیای مایکروسافت به آن GUID هم می‌گویند. هر UUID شانزده بایت است که معمولاً به‌صورت ۳۲ رقم هگزادسیمال در پنج گروه نوشته می‌شود: هشت، چهار، چهار، چهار و دوازده رقم که با خط تیره جدا شده‌اند؛ در مجموع ۳۶ کاراکتر. استاندارد فعلی آن RFC 9562 است که در سال ۲۰۲۴ جایگزین RFC 4122 شد و نسخه‌های ۶، ۷ و ۸ را هم رسمی کرد.

دو جای ثابت در هر UUID معنای خاصی دارند. اولین رقم گروه سوم نسخه را نشان می‌دهد؛ پس در UUID نسخهٔ ۴ این رقم همیشه 4 و در نسخهٔ ۷ همیشه 7 است. اولین رقم گروه چهارم هم «گونه» را نشان می‌دهد و در UUID‌های استاندارد یکی از 8، 9، a یا b است. با نگاه به این دو رقم می‌توانید نسخهٔ هر UUID را تشخیص دهید.

نسخهمنبع دادهکاربرد معمول
۱زمان و آدرس MACسیستم‌های قدیمی؛ آدرس سخت‌افزار را فاش می‌کند
۳ و ۵هش یک نام در یک فضای نامشناسهٔ ثابت برای یک ورودی مشخص
۴کاملاً تصادفیرایج‌ترین نسخه برای شناسهٔ عمومی
۶زمان با ترتیب بایت مرتب‌شدنیجایگزین مرتب‌شدنی نسخهٔ ۱
۷زمان یونیکس به میلی‌ثانیه و بیت‌های تصادفیکلید اصلی پایگاه داده
۸قالب آزادطرح‌های اختصاصی سازمان‌ها

این ابزار فقط نسخه‌های ۴ و ۷ را تولید می‌کند، چون برای تقریباً همهٔ پروژه‌های جدید یکی از این دو بهترین انتخاب است.

تفاوت UUID نسخهٔ ۴ و نسخهٔ ۷

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

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

ویژگینسخهٔ ۴نسخهٔ ۷
بیت‌های تصادفی۱۲۲۷۴ در این ابزار
ترتیب زمانیندارددارد (با دقت میلی‌ثانیه)
زمان ساخت از روی شناسهقابل استخراج نیستقابل استخراج است
اثر روی ایندکس پایگاه دادهدرج پراکندهدرج پشت‌سرهم در انتهای ایندکس
مناسب برایشناسهٔ عمومی و غیرقابل‌حدسکلید اصلی و رکوردهای زمانی

بازگشت به فهرست مطالب

ابزار تولید UUID ایران‌کلاد چطور کار می‌کند؟

با باز شدن صفحه، پنج UUID نسخهٔ ۴ ساخته می‌شود. با گزینه‌های بالای فهرست بین نسخهٔ ۴ و ۷ جابه‌جا می‌شوید، در کادر «تعداد» عددی بین ۱ تا ۱۰۰ وارد می‌کنید و دکمهٔ «ساخت دوباره» فهرست تازه‌ای می‌سازد. در «قالب نمایش» می‌توانید خط تیره‌ها را حذف کنید، مثلاً برای ستونی که ۳۲ نویسهٔ بدون خط تیره می‌خواهد، یا حروف را بزرگ کنید. کنار هر شناسه دکمهٔ کپی هست و دکمهٔ «کپی همه» کل فهرست را با همان قالب، هر شناسه در یک خط، در کلیپ‌بورد می‌گذارد تا مستقیم در فایل seed، اسکریپت SQL یا صفحه‌گسترده بچسبانید.

نسخهٔ ۴ با تابع crypto.randomUUID مرورگر ساخته می‌شود و اگر مرورگر آن را نداشته باشد، با crypto.getRandomValues و تنظیم دستی بیت‌های نسخه و گونه؛ هر دو از مولد عدد تصادفی امن رمزنگاری استفاده می‌کنند، نه Math.random معمولی. در نسخهٔ ۷ زمان از ساعت دستگاه شما خوانده می‌شود و ۷۴ بیت بقیه از همان مولد امن می‌آید. خروجی پیش‌فرض با حروف کوچک هگزادسیمال و با خط تیره است که قالب استاندارد و رایج‌ترین شکل نمایش UUID است.

یک روش کاربردی: اگر برای محیط تست به چند رکورد با شناسهٔ ثابت نیاز دارید، تعداد را روی همان عدد بگذارید، فهرست را یک‌جا کپی کنید و در فایل seed یا اسکریپت مهاجرت بچسبانید. چون شناسه‌ها ثابت در فایل ذخیره می‌شوند، هر بار که پایگاه دادهٔ تست را از نو می‌سازید همان شناسه‌ها برمی‌گردند و لینک‌ها، تست‌های خودکار و داده‌های وابسته نمی‌شکنند. مقایسهٔ حروف بزرگ و کوچک هم مهم است: استاندارد خروجی را با حروف کوچک توصیه می‌کند ولی خواندن هر دو شکل را الزامی می‌داند؛ پس اگر در کد UUID را به‌صورت رشته مقایسه می‌کنید، پیش از مقایسه هر دو طرف را به حروف کوچک تبدیل کنید.

در تولید گروهی، ده‌ها UUID نسخهٔ ۷ در یک میلی‌ثانیه ساخته می‌شوند. این ابزار در این حالت از روش «افزایش تصادفی» استاندارد RFC 9562 استفاده می‌کند: بخش تصادفی شناسهٔ قبلی با گامی تصادفی افزایش پیدا می‌کند، پس هر فهرست، و هر شناسه‌ای که بعد از آن در همین صفحه بسازید، دقیقاً به ترتیب ساخت مرتب می‌شود. در کد خودتان هم کتابخانه‌ای انتخاب کنید که چنین شمارنده‌ای داشته باشد.

بازگشت به فهرست مطالب

کاربردهای رایج UUID در توسعهٔ نرم‌افزار

مزیت اصلی UUID این است که هر بخشی از سیستم می‌تواند بدون پرسیدن از پایگاه داده شناسه بسازد. اپلیکیشن موبایل می‌تواند رکوردی را آفلاین با UUID بسازد و بعداً همگام کند، چند سرویس می‌توانند هم‌زمان رکورد درج کنند بی‌آنکه شناسه‌ها تداخل پیدا کنند و ادغام داده از دو پایگاه دادهٔ جدا بدون بازشماره‌گذاری انجام می‌شود.

برای تست و توسعه هم این ابزار کاربرد زیادی دارد: ساختن دادهٔ نمونه، پر کردن فایل‌های fixture، تعیین کلید یکتایی درخواست (idempotency key) هنگام تست API یا نام‌گذاری فایل‌ها و پوشه‌های موقت. وقتی UUID‌ها را در لاگ یا متن طولانی جست‌وجو می‌کنید، نمونهٔ آمادهٔ UUID در تست Regex کمک می‌کند.

  • کلید اصلی جدول‌ها در پایگاه داده
  • شناسهٔ درخواست برای ردیابی در لاگ سرویس‌ها
  • کلید یکتایی برای جلوگیری از پرداخت یا ثبت تکراری
  • نام فایل‌های آپلودشده در فضای ذخیره‌سازی
  • شناسهٔ پیام در صف‌ها و سامانه‌های رویدادمحور
  • دادهٔ نمونه برای تست و محیط توسعه

بازگشت به فهرست مطالب

UUID به‌عنوان کلید اصلی پایگاه داده: نکته‌های عملکردی

در بیشتر موتورهای پایگاه داده، کلید اصلی در یک ایندکس B-tree نگه‌داری می‌شود. وقتی کلیدها تصادفی باشند، مثل UUID نسخهٔ ۴، هر درج جدید در جای تصادفی ایندکس می‌نشیند؛ صفحه‌های ایندکس مدام شکافته می‌شوند و کش حافظه کارایی کمتری دارد. در جدول‌های کوچک این اثر محسوس نیست، ولی در جدول‌های چند ده میلیون ردیفی سرعت درج را به‌طور قابل‌توجهی کم می‌کند. در MySQL با موتور InnoDB که داده‌ها بر اساس کلید اصلی مرتب ذخیره می‌شوند، این اثر بیشتر است.

UUID نسخهٔ ۷ این مشکل را تا حد زیادی حل می‌کند، چون شناسه‌های جدید همیشه در انتهای ایندکس اضافه می‌شوند؛ رفتاری شبیه کلید افزایشی معمولی، با این تفاوت که همچنان بدون هماهنگی ساخته می‌شود. در PostgreSQL نوع داده‌ای uuid شانزده بایت فضا می‌گیرد و تابع gen_random_uuid() از نسخهٔ ۱۳ به بعد UUID نسخهٔ ۴ می‌سازد؛ تابع داخلی uuidv7() از نسخهٔ ۱۸ اضافه شده است. در MySQL بهتر است UUID را به‌جای رشتهٔ ۳۶ کاراکتری در ستون BINARY(16) با تابع UUID_TO_BIN ذخیره کنید.

تابع UUID() در MySQL شناسهٔ نسخهٔ ۱ می‌سازد، نه ۴ یا ۷. اگر نسخهٔ ۷ می‌خواهید، آن را در اپلیکیشن بسازید و به پایگاه داده بفرستید.

بازگشت به فهرست مطالب

احتمال تکراری شدن UUID چقدر است؟

با ۱۲۲ بیت تصادفی، تعداد UUID‌های نسخهٔ ۴ ممکن حدود ۵٫۳ × ۱۰ به توان ۳۶ است. بر اساس مسئلهٔ تولد، برای اینکه احتمال حتی یک تکرار به ۵۰ درصد برسد، باید حدود ۲٫۷ × ۱۰ به توان ۱۸ شناسه بسازید؛ یعنی اگر هر ثانیه یک میلیارد UUID تولید کنید، حدود ۸۵ سال طول می‌کشد. در عمل، احتمال تکرار از احتمال خرابی سخت‌افزار بسیار کمتر است.

در نسخهٔ ۷ بیت‌های تصادفی کمترند، ولی تکرار فقط بین شناسه‌هایی ممکن است که در یک میلی‌ثانیه ساخته شده‌اند. ۷۴ بیت تصادفی در هر میلی‌ثانیه برای هر کاربرد معمولی کاملاً کافی است. شرط اصلی هر دو نسخه این است که مولد تصادفی امن باشد؛ مشکلات واقعی تکرار UUID تقریباً همیشه از مولدهای ضعیف یا کپی شدن وضعیت ماشین مجازی ناشی شده‌اند، نه از ریاضیات.

با این حال، ستون کلید را در پایگاه داده یکتا تعریف کنید تا اگر به هر دلیلی، مثلاً یک باگ در کد، شناسهٔ تکراری ساخته شد، خطا بگیرید و دادهٔ خراب ذخیره نشود.

بازگشت به فهرست مطالب

امنیت و حریم خصوصی: آیا UUID راز است؟

UUID برای یکتایی طراحی شده، نه برای محرمانگی. نسخهٔ ۴ ساخته‌شده با مولد امن حدس‌زدنی نیست، ولی شناسه‌ها معمولاً در آدرس صفحه، لاگ و پاسخ API دیده می‌شوند؛ پس هرگز نباید داشتن UUID به‌تنهایی مجوز دسترسی باشد. برای توکن نشست، کلید API یا لینک بازیابی رمز از توکن تصادفی اختصاصی با طول کافی استفاده کنید؛ تولید پسورد برای ساخت چنین رشته‌هایی مناسب است.

نسخهٔ ۷ یک نکتهٔ حریم خصوصی هم دارد: زمان ساخت شناسه با دقت میلی‌ثانیه از خود آن قابل استخراج است. اگر شناسه را به کاربران نشان می‌دهید و زمان ثبت‌نام یا سفارش نباید معلوم شود، برای شناسهٔ عمومی از نسخهٔ ۴ استفاده کنید و نسخهٔ ۷ را برای کلید داخلی نگه دارید.

خود این ابزار کاملاً در مرورگر اجرا می‌شود. سرور ایران‌کلاد فقط صفحه را تحویل می‌دهد، UUID‌ها روی دستگاه شما ساخته می‌شوند و کد ابزار هیچ‌کدام را به سرور نمی‌فرستد؛ پس شناسه‌هایی که می‌سازید جایی ثبت نمی‌شوند.

بازگشت به فهرست مطالب

ساخت UUID در کد: از ابزار آنلاین تا اپلیکیشن

ابزار آنلاین برای تست، دادهٔ نمونه و کارهای دستی عالی است، ولی در اپلیکیشن باید UUID را در خود کد ساخت. در JavaScript مرورگرها و Node.js تابع crypto.randomUUID() نسخهٔ ۴ می‌سازد. در Python ماژول uuid تابع uuid4() دارد. در PHP کتابخانه‌های رایج مثل ramsey/uuid یا کامپوننت Uid سیمفونی هر دو نسخه را پشتیبانی می‌کنند و در Go بستهٔ google/uuid هم نسخهٔ ۴ و هم ۷ را می‌سازد.

برای نسخهٔ ۷، پیش از انتخاب کتابخانه بررسی کنید که از RFC 9562 پیروی کند و در صورت نیاز شمارندهٔ یکنواخت داشته باشد. زمان سرورهایی که UUID نسخهٔ ۷ می‌سازند باید درست باشد؛ اگر ساعت سرور عقب یا جلو باشد، ترتیب شناسه‌ها با ترتیب واقعی رخدادها نمی‌خواند. برای تبدیل بخش زمانی به تاریخ خوانا، UUID را در بخش «بررسی و تشخیص نسخهٔ UUID» همین صفحه بچسبانید؛ زمان ساخت به وقت تهران و ISO 8601 نمایش داده می‌شود و با یک کلیک در تبدیل Unix Timestamp باز می‌شود.

بازگشت به فهرست مطالب

جمع‌بندی: کدام نسخه را انتخاب کنیم؟

اگر شناسه را به کاربر نشان می‌دهید و نمی‌خواهید چیزی از آن معلوم شود، نسخهٔ ۴ را انتخاب کنید. اگر شناسه کلید اصلی جدولی است که سریع بزرگ می‌شود یا می‌خواهید رکوردها به ترتیب ساخت مرتب شوند، نسخهٔ ۷ انتخاب بهتری است. در بسیاری از سیستم‌ها هر دو کنار هم استفاده می‌شوند: نسخهٔ ۷ برای کلید داخلی و نسخهٔ ۴ یا یک شناسهٔ کوتاه‌تر برای نمایش عمومی.

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

بازگشت به فهرست مطالب بازگشت به ابتدای راهنما

پرسش و پاسخ،  ۱۰ پرسش

سؤالات متداول

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

تفاوت UUID و GUID چیست؟
در عمل هیچ. GUID نامی است که مایکروسافت برای همان شناسهٔ ۱۲۸ بیتی به کار می‌برد. قالب نمایش و ساختار یکی است.
UUID نسخهٔ ۴ بهتر است یا نسخهٔ ۷؟
برای شناسهٔ عمومی که نباید اطلاعاتی فاش کند نسخهٔ ۴، و برای کلید اصلی پایگاه داده که ترتیب زمانی و درج سریع در ایندکس مهم است نسخهٔ ۷ مناسب‌تر است.
آیا UUID‌های این ابزار واقعاً تصادفی و امن‌اند؟
بله. نسخهٔ ۴ با crypto.randomUUID مرورگر و در نبود آن با crypto.getRandomValues ساخته می‌شود و بیت‌های تصادفی نسخهٔ ۷ هم از crypto.getRandomValues می‌آیند؛ هر دو مولد امن رمزنگاری‌اند، نه Math.random.
آیا UUID‌هایی که می‌سازم جایی ذخیره می‌شوند؟
خیر. تولید کاملاً در مرورگر شما انجام می‌شود و کد ابزار هیچ شناسه‌ای را به سرور ایران‌کلاد نمی‌فرستد.
حداکثر چند UUID را می‌توانم یک‌جا بسازم؟
در هر بار تا ۱۰۰ شناسه. با دکمهٔ «کپی همه» کل فهرست، هر شناسه در یک خط و با قالب انتخاب‌شده، کپی می‌شود و با «ساخت دوباره» فهرست تازه‌ای می‌گیرید.
آیا UUID‌های نسخهٔ ۷ یک فهرست دقیقاً به ترتیب ساخت‌اند؟
بله. شناسه‌های یک فهرست معمولاً در یک میلی‌ثانیه ساخته می‌شوند؛ ابزار در این حالت بخش تصادفی شناسهٔ قبلی را با گامی تصادفی افزایش می‌دهد (روش استاندارد RFC 9562)، پس مرتب‌سازی معمولی رشته‌ها همان ترتیب ساخت را نتیجه می‌دهد.
از کجا بفهمم یک UUID چه نسخه‌ای است؟
به اولین رقم گروه سوم نگاه کنید: در نسخهٔ ۴ این رقم 4 و در نسخهٔ ۷ رقم 7 است. اولین رقم گروه چهارم هم در UUID‌های استاندارد یکی از 8، 9، a یا b است. ساده‌تر از آن، UUID را در بخش «بررسی» همین صفحه بچسبانید تا نسخه، گونه و در صورت وجود زمان ساخت را ببینید.
آیا می‌توانم از UUID به‌عنوان توکن امنیتی استفاده کنم؟
توصیه نمی‌شود. UUID برای یکتایی طراحی شده و معمولاً در آدرس‌ها و لاگ‌ها دیده می‌شود. برای توکن نشست و کلید API یک رشتهٔ تصادفی اختصاصی و طولانی‌تر بسازید.
UUID را در MySQL به چه شکلی ذخیره کنم؟
ستون BINARY(16) با توابع UUID_TO_BIN و BIN_TO_UUID فضای کمتری از رشتهٔ ۳۶ کاراکتری می‌گیرد و ایندکس کوچک‌تری دارد. دقت کنید تابع UUID() خود MySQL نسخهٔ ۱ می‌سازد.
آیا زمان ساخت از روی UUID نسخهٔ ۷ قابل خواندن است؟
بله. ۴۸ بیت اول آن زمان یونیکس به میلی‌ثانیه است. اگر زمان ساخت رکورد نباید فاش شود، برای شناسه‌هایی که به کاربر نمایش می‌دهید از نسخهٔ ۴ استفاده کنید.

پاسخ پرسش خود را پیدا نکردید؟ با پشتیبانی در تماس باشید.

سرور ابری

سرور ابری ایران‌کلاد در کمتر از ۶۰ ثانیه آماده می‌شود؛ با دیسک NVMe SSD، پورت اختصاصی ۱۰ گیگابیت و صورت‌حساب ساعتی تومانی، از ۱٬۱۰۰ تومان در ساعت.