تولید UUID v4
UUIDهای تصادفی نسخه ۴ را با مولد امن اعداد تصادفی مرورگرتان بسازید؛ تکتک یا گروهی.
تولید UUID تصادفی نسخه ۴
نسخه ۴ همان UUIDی است که بیشتر افراد وقتی میگویند «یک UUID» منظورشان است. نه برچسب زمانی دارد، نه آدرس دستگاه و نه نام؛ فقط ۱۲۲ بیت تصادفی. همین باعث میشود بتوان آن را هر جایی و بدون هماهنگی ساخت: در مرورگر، روی گوشی یا همزمان روی هزار سرور.
این صفحه سازنده UUID را با نسخه ۴ انتخابشده و نخستین UUID ساختهشده باز میکند.
ساختار یک UUID v4
به f47ac10b-58cc-4372-a567-0e02b2c3d479 نگاه کنید. 4 که گروه سوم را شروع میکند نسخه است. نخستین رقم گروه چهارم، اینجا a، همیشه یکی از 8، 9، a یا b است، چون دو بیت بالای آن variant را نگه میدارند. همه رقمهای هگز دیگر تصادفیاند.
احتمال تکرار چقدر کم است؟
| تعداد UUID ساختهشده | احتمال وجود دستکم یک مورد تکراری |
|---|---|
| ۱ میلیارد (۱۰ به توان ۹) | حدود ۱ در ۱۰ به توان ۱۹ |
| هزار میلیارد (۱۰ به توان ۱۲) | حدود ۱ در ۱۰ به توان ۱۳ |
| ۲٫۷ × ۱۰ به توان ۱۸ | حدود ۵۰٪ |
این ارقام با فرض یک منبع تصادفی خوب به دست آمدهاند. به همین دلیل این ابزار از crypto.getRandomValues استفاده میکند و نه Math.random که برای تضمین یکتایی طراحی نشده است.
v4 یا v7؟
UUIDهای تصادفی ردیفهای جدید را در سراسر ایندکس پایگاهداده پخش میکنند و این میتواند درج (insert) را در جدولهای بسیار بزرگ کند کند. اگر UUIDها کلید اصلی یک پایگاهداده پرترافیکاند، UUID v7 را در نظر بگیرید که با برچسب زمانی شروع میشود و مقدارهای جدیدش به ترتیب مرتب میشوند. برای توکنها، شناسههای همبستگی (correlation ID) و نام فایلها، v4 همچنان انتخاب ساده و پیشفرض است.
ساخت v4 در کد
- JavaScript:
crypto.randomUUID() - Python:
import uuid; uuid.uuid4() - Java:
UUID.randomUUID() - C#:
Guid.NewGuid() - PostgreSQL 13+:
gen_random_uuid() - شل لینوکس:
cat /proc/sys/kernel/random/uuid
اگر پلتفرم شما به آنها GUID میگوید و آکولاد یا حروف بزرگ میخواهد، صفحه تولید GUID همین گزینهها را از قبل روشن کرده است.