تولید UUID / GUID

ساخت شناسه یکتا جهانی (Universal Unique Identifier) نسخه ۴. مناسب برای کلیدهای دیتابیس، توکن‌های API و شناسه‌های توزیع‌شده.

استفاده از خط تیره (-)
حروف بزرگ (UPPERCASE)
Output Console

UUID چیست؟ (تعریف علمی)

واژه UUID مخفف "Universally Unique Identifier" به معنی "شناسه منحصر به فرد جهانی" است. این شناسه یک عدد ۱۲۸ بیتی است که برای برچسب‌گذاری اطلاعات در سیستم‌های کامپیوتری استفاده می‌شود. هدف اصلی UUID این است که بتوان بدون نیاز به یک مرجع مرکزی (مانند دیتابیس متمرکز)، شناسه‌هایی تولید کرد که در تمام جهان یکتا باشند. مایکروسافت همین استاندارد را با نام GUID (Globally Unique Identifier) استفاده می‌کند.

ساختار استاندارد (نسخه ۴)

یک UUID استاندارد از ۳۲ رقم هگزادسیمال (Hexadecimal) تشکیل شده که در ۵ گروه با خط تیره جدا می‌شوند:

xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
اجزای ساختار:
  • M: نشان‌دهنده نسخه UUID است (برای حالت رندوم عدد 4).
  • N: نشان‌دهنده Variant است (معمولاً 8, 9, A یا B).
  • x: ارقام هگزادسیمال تصادفی (0-9 و a-f).
تعداد کل حالات ممکن:2^122 ≈ 5.3 × 10^36

اگر در هر ثانیه ۱ میلیارد UUID تولید کنید، حدود ۸۵ سال طول می‌کشد تا احتمال ۵۰٪ وجود داشته باشد که یک شناسه تکراری تولید شود.

کاربردهای عملی در پروژه‌ها

کلید اصلی (Primary Key)

استفاده به عنوان ID در دیتابیس‌های توزیع شده (مثل MongoDB یا Cassandra) که امکان استفاده از ID افزایشی (Auto-Increment) وجود ندارد.

توکن نشست (Session)

ایجاد توکن‌های احراز هویت موقت برای کاربران در وب‌سایت‌های فروشگاهی یا سامانه‌های بانکی.

نام‌گذاری فایل‌ها

جلوگیری از بازنویسی فایل‌ها هنگام آپلود تصاویر کاربران با تغییر نام فایل به یک UUID تصادفی.

اشتباهات رایج برنامه‌نویسان

  • ذخیره UUID به صورت رشته (String) در دیتابیس‌های SQL قدیمی (بهتر است به صورت Binary(16) ذخیره شود).
  • تصور اینکه UUID ها به ترتیب زمان تولید مرتب می‌شوند (نسخه ۴ کاملاً تصادفی است و ترتیب زمانی ندارد).
  • تلاش برای ساخت UUID با توابع رندوم ضعیف (مثل Math.random) که باعث تکراری شدن کلیدها می‌شود.
  • استفاده از UUID برای URL های عمومی (سئو پسند نیست و خوانایی ندارد).
  • حذف خط تیره‌ها بدون در نظر گرفتن استاندارد سیستم مقصد.

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

آیا UUID همان GUID است؟
بله. GUID (Globally Unique Identifier) نامی است که مایکروسافت استفاده می‌کند، در حالی که UUID نام استاندارد RFC 4122 است. از نظر ساختاری کاملاً یکسان هستند.
چرا از ID عددی معمولی (1, 2, 3) استفاده نکنیم؟
آی‌دی‌های عددی (Auto Increment) قابل حدس زدن هستند. اگر رقیب شما بداند آخرین سفارش شماره ۱۰۰۰ بوده و فردا ۱۰۰۵ است، می‌فهمد شما ۵ فروش داشته‌اید. UUID این اطلاعات را مخفی می‌کند و برای ادغام دیتابیس‌ها امن‌تر است.
کدام نسخه UUID بهتر است؟
برای اکثر کاربردهای مدرن، نسخه ۴ (Random) بهترین انتخاب است چون به هیچ ورودی خاصی نیاز ندارد. نسخه ۱ شامل زمان و مک آدرس است که ممکن است حریم خصوصی را به خطر بیندازد.