مولد UUID

أداة احترافية لتوليد والتحقق من معرّفات UUID تدعم إصدارات متعددة بما في ذلك v1 (الطابع الزمني)، وv4 (عشوائي)، وv5 (مبني على الاسم)، وv7 (وقت Unix + عشوائي). توفر توليدًا دفعيًا بعدد قابل للتخصيص، وخيارات تنسيق مرنة تشمل التحويل إلى أحرف كبيرة، وإزالة الشرطات، وإضافة الأقواس. تتضمن أداة تحقق مدمجة لمعرّفات UUID مع كشف الإصدار وتقدم أمثلة برمجية بلغات متعددة. مناسبة لتحديد سجلات قاعدة البيانات، وتتبع السجلات، والواجهات بين الأنظمة، وسيناريوهات أخرى. يتم تنفيذ جميع العمليات محليًا في متصفحك، مما يضمن الخصوصية والأمان.

مولد UUID

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

مدقق UUID

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

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

الميزات

  • يدعم إصدارات UUID 1 و4 و5 و7
  • إنشاء دفعي بعدد قابل للتخصيص
  • تنسيق مرن: أحرف كبيرة، إزالة الشرطات، إضافة الأقواس المعقوفة
  • مدقق مدمج مع كشف تلقائي للإصدار
  • دعم كامل لتعدد اللغات والسماات المتعددة

ما هو UUID؟

معرّفات UUID هي معرفات بطول 128 بت، وتمثل عادةً كسلاسل نصية بطول 36 حرفًا تتضمن شرطات.

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

UUID الإصدار 4: يتم إنشاؤه عشوائيًا؛ الأكثر استخدامًا على نطاق واسع، ويوفر تفردًا قويًا وخصوصية عالية.

UUID الإصدار 7: يعتمد على أجزاء من الثانية في نظام Unix + بتات عشوائية؛ قابل للفرز بشكل طبيعي ويتجنب مشاكل الخصوصية الموجودة في الإصدار 1.

UUID الإصدار 5: يُنشأ بشكل حتمي من معرّف مساحة أسماء UUID واسم باستخدام SHA-1؛ المدخلات المتطابقة تنتج دائمًا مخرجات متطابقة.

UUID أمثلة سريعة

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

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

  • معرّفات فريدة لسجلات قاعدة البيانات أو الموارد
  • معرّفات التتبع للتسجيل وتتبع الأحداث
  • معرّفات عامة غير قابلة للتنبؤ
  • معرّفات متسقة عبر تكامل الأنظمة

UUID الأسئلة الشائعة والمصائد

  • الإصدار 1 والخصوصية: قد يكشف الإصدار 1 الطوابع الزمنية أو مواقع الأجهزة المادية؛ يفضل استخدام الإصدار 4 للحالات الحساسة للخصوصية.
  • حساسية حالة الأحرف: مطابقة UUID لا تتأثر بحالة الأحرف.
  • الشرطات هي فقط لتحسين القراءة؛ احتفظ بها إلا إذا كانت هناك قيود بسبب أنظمة قديمة.
  • التنسيق ذو الأقواس المعقوفة (مثل {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}) مقبول في بعض البيئات (مثل سجل Windows).
  • الإصدار 5 حتمي: نفس مساحة الأسماء + الاسم => نفس 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 */ }