أداة توليد UUID

توليد والتحقق من UUID (v1، v4، v5، v7)، مع دعم التوليد الجماعي وخيارات تنسيق متعددة، بالإضافة إلى أمثلة كود بلغات برمجة متعددة.

مُولِّد UUID

خيارات التنسيق

مُحقق UUID

تعليمات الاستخدام

UUID هو معرف مكون من 128 بت، ويُعرض بشكل قياسي كسلسلة مكونة من 36 حرفًا تحتوي على شرطات.
UUID v1: مبني على الطابع الزمني ومعلومات بطاقة الشبكة؛ مرتب زمنيًا لكنه قد يكشف الوقت/الموقع.
UUID v4: مبني على أرقام عشوائية، الأكثر شيوعًا، ويتميز بخصوصية وفرادة جيدة.
UUID v7: مبني على وقت Unix بالميلي ثانية + رقم عشوائي، قابل للترتيب تلقائيًا وتجنب مشاكل الخصوصية في v1.
UUID v5: مبني على مساحة اسم UUID واسم معين، ويُحسب باستخدام SHA-1؛ الإدخال نفسه ينتج نفس الناتج دائمًا.
التنسيق القياسي: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (36 حرفًا).

الميزات

  • يدعم UUID v1 و v4 و v5 و v7
  • يدعم التوليد الجماعي بعدد مخصص
  • تنسيق مرن: أحرف كبيرة، إزالة الشرطات، إضافة أقواس معقوفة
  • مُحقق مدمج مع التعرف التلقائي على الإصدار
  • دعم كامل للترجمة الدولية ومتعدد المواضيع

ما هو UUID؟

UUID هو معرف مكون من 128 بت، ويُعرض بشكل قياسي كسلسلة مكونة من 36 حرفًا تحتوي على شرطات.

UUID v1: مبني على الطابع الزمني ومعلومات بطاقة الشبكة؛ مرتب زمنيًا لكنه قد يكشف الوقت/الموقع.

UUID v4: مبني على أرقام عشوائية، الأكثر شيوعًا، ويتميز بخصوصية وفرادة جيدة.

UUID v7: مبني على وقت Unix بالميلي ثانية + رقم عشوائي، قابل للترتيب تلقائيًا وتجنب مشاكل الخصوصية في v1.

UUID v5: مبني على مساحة اسم UUID واسم معين، ويُحسب باستخدام SHA-1؛ الإدخال نفسه ينتج نفس الناتج دائمًا.

UUID أمثلة سريعة

التنسيق القياسي:
550e8400-e29b-41d4-a716-446655440000
التنسيق بأحرف كبيرة:
550E8400-E29B-41D4-A716-446655440000
بدون شرطات:
550e8400e29b41d4a716446655440000
مع أقواس معقوفة:
{550e8400-e29b-41d4-a716-446655440000}

UUID حالات الاستخدام الشائعة

  • معرف فريد لسجلات قاعدة البيانات أو الموارد
  • معرف تتبع (Trace ID) للسجلات والتتبعات
  • معرفات عامة لا يمكن التنبؤ بها بسهولة
  • معرف موحد عبر واجهات الأنظمة المختلفة

UUID الأسئلة الشائعة والنصائح

  • v1 والخصوصية: قد يكشف v1 الوقت أو الموقع، يُنصح باستخدام v4 عند أهمية الخصوصية.
  • هل الأحرف الكبيرة والصغيرة متكافئة؟: التحقق غير حساس لحالة الأحرف.
  • الشرطات مخصصة فقط للعرض؛ يُفضل الاحتفاظ بها ما لم تكن محدودة.
  • تنسيق الأقواس المعقوفة مقبول في بعض البيئات (مثل سجل ويندوز).
  • v5 ذو طبيعة حتمية (نفس مساحة الاسم + الاسم => نفس UUID). مناسب للسيناريوهات المتكافئة؛ غير مناسب للسيناريوهات التي تتطلب عدم القابلية للتنبؤ.

كيفية استخدام UUID في لغات البرمجة

JavaScript
التوليد
// UUID v4 (simple)
function uuidv4(){
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {
    const r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
    return v.toString(16);
  });
}
const id = uuidv4();
UUID v7 (وقت Unix + عشوائي)
// UUID v7 (Unix ms + randomness)
function uuidv7(){
  const cryptoObj = (globalThis.crypto || globalThis.msCrypto);
  const rb = n => { const a = new Uint8Array(n); cryptoObj?.getRandomValues ? cryptoObj.getRandomValues(a) : a.forEach((_,i)=>a[i]=Math.random()*256|0); return a; };
  const hex = b => Array.from(b).map(x=>x.toString(16).padStart(2,'0')).join('');
  const ts = BigInt(Date.now()).toString(16).padStart(12,'0');
  const ver = rb(2); ver[0] = (ver[0] & 0x0f) | 0x70;    // set version 7
  const vrn = rb(2); vrn[0] = (vrn[0] & 0x3f) | 0x80;    // RFC4122 variant
  const tail = rb(6);
  return `${ts.slice(0,8)}-${ts.slice(8,12)}-${hex(ver)}-${hex(vrn)}-${hex(tail)}`;
}
const id7 = uuidv7();
التحقق
const re=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
re.test(id); // true/false
PHP
التوليد
<?php
// v4 using random_bytes
function uuidv4(){
  $data = random_bytes(16);
  $data[6] = chr((ord($data[6]) & 0x0f) | 0x40);
  $data[8] = chr((ord($data[8]) & 0x3f) | 0x80);
  return vsprintf('%s%s-%s-%s-%s-%s%s%s', str_split(bin2hex($data), 4));
}
$id = uuidv4();
UUID v7 (وقت Unix + عشوائي)
<?php
// composer require ramsey/uuid:^4.7
use Ramsey\Uuid\Uuid;

$uuid7 = Uuid::uuid7();
التحقق
<?php
$re = '/^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i';
preg_match($re, $id) === 1; // true/false
Python
التوليد
import uuid
# v4
uid = uuid.uuid4()
# v1
uid1 = uuid.uuid1()
UUID v7 (وقت Unix + عشوائي)
# pip install uuid6
from uuid6 import uuid7

uid7 = uuid7()
التحقق
import re
re_uuid = re.compile(r'^[0-9a-f]{8}-[0-9a-f]{4}-[1-57][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$', re.I)
bool(re_uuid.match(str(uid)))
Go
التوليد
// go get github.com/google/uuid
import "github.com/google/uuid"

id := uuid.New()     // v4
id1 := uuid.NewUUID() // v1 (may return error)
UUID v7 (وقت Unix + عشوائي)
// go get github.com/gofrs/uuid/v5
import (
  uuid "github.com/gofrs/uuid/v5"
)

id7, err := uuid.NewV7()
التحقق
import "github.com/google/uuid"
_, err := uuid.Parse(id.String()) // err == nil means valid
Rust
التوليد
// Cargo.toml: uuid = { version = "1", features = ["v4", "v1"] }
use uuid::Uuid;

let v4 = Uuid::new_v4();
// v1 requires a context/ts, often via external crate; shown for completeness
UUID v7 (وقت Unix + عشوائي)
// Cargo.toml: uuid = { version = "1", features = ["v7"] }
use uuid::Uuid;

let v7 = Uuid::now_v7();
التحقق
use uuid::Uuid;
let ok = Uuid::parse_str(v4.to_string().as_str()).is_ok();
Java
التوليد
import java.util.UUID;

UUID id = UUID.randomUUID(); // v4
UUID v7 (وقت Unix + عشوائي)
// Maven: com.github.f4b6a3:uuid-creator
import com.github.f4b6a3.uuid.UuidCreator;

UUID v7 = UuidCreator.getTimeOrderedEpoch(); // UUIDv7
التحقق
import java.util.UUID;

try { UUID.fromString(id.toString()); /* valid */ } catch (IllegalArgumentException ex) { /* invalid */ }