مولد UUID
أداة احترافية لتوليد والتحقق من معرّفات UUID تدعم إصدارات متعددة بما في ذلك v1 (الطابع الزمني)، وv4 (عشوائي)، وv5 (مبني على الاسم)، وv7 (وقت Unix + عشوائي). توفر توليدًا دفعيًا بعدد قابل للتخصيص، وخيارات تنسيق مرنة تشمل التحويل إلى أحرف كبيرة، وإزالة الشرطات، وإضافة الأقواس. تتضمن أداة تحقق مدمجة لمعرّفات UUID مع كشف الإصدار وتقدم أمثلة برمجية بلغات متعددة. مناسبة لتحديد سجلات قاعدة البيانات، وتتبع السجلات، والواجهات بين الأنظمة، وسيناريوهات أخرى. يتم تنفيذ جميع العمليات محليًا في متصفحك، مما يضمن الخصوصية والأمان.
دليل الاستخدام
الميزات
- يدعم إصدارات UUID 1 و4 و5 و7
- إنشاء دفعي بعدد قابل للتخصيص
- تنسيق مرن: أحرف كبيرة، إزالة الشرطات، إضافة الأقواس المعقوفة
- مدقق مدمج مع كشف تلقائي للإصدار
- دعم كامل لتعدد اللغات والسماات المتعددة
ما هو UUID؟
معرّفات UUID هي معرفات بطول 128 بت، وتمثل عادةً كسلاسل نصية بطول 36 حرفًا تتضمن شرطات.
UUID v1: مبني على الطابع الزمني وعنوان MAC؛ مرتب زمنيًا لكنه قد يكشف معلومات عن التوقيت أو الموقع.
UUID الإصدار 4: يتم إنشاؤه عشوائيًا؛ الأكثر استخدامًا على نطاق واسع، ويوفر تفردًا قويًا وخصوصية عالية.
UUID الإصدار 7: يعتمد على أجزاء من الثانية في نظام Unix + بتات عشوائية؛ قابل للفرز بشكل طبيعي ويتجنب مشاكل الخصوصية الموجودة في الإصدار 1.
UUID الإصدار 5: يُنشأ بشكل حتمي من معرّف مساحة أسماء UUID واسم باستخدام SHA-1؛ المدخلات المتطابقة تنتج دائمًا مخرجات متطابقة.
UUID حالات الاستخدام الشائعة
- معرّفات فريدة لسجلات قاعدة البيانات أو الموارد
- معرّفات التتبع للتسجيل وتتبع الأحداث
- معرّفات عامة غير قابلة للتنبؤ
- معرّفات متسقة عبر تكامل الأنظمة
UUID الأسئلة الشائعة والمصائد
- الإصدار 1 والخصوصية: قد يكشف الإصدار 1 الطوابع الزمنية أو مواقع الأجهزة المادية؛ يفضل استخدام الإصدار 4 للحالات الحساسة للخصوصية.
- حساسية حالة الأحرف: مطابقة UUID لا تتأثر بحالة الأحرف.
- الشرطات هي فقط لتحسين القراءة؛ احتفظ بها إلا إذا كانت هناك قيود بسبب أنظمة قديمة.
- التنسيق ذو الأقواس المعقوفة (مثل {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}) مقبول في بعض البيئات (مثل سجل Windows).
- الإصدار 5 حتمي: نفس مساحة الأسماء + الاسم => نفس UUID. مثالي للعمليات العادلة؛ تجنبه عندما تكون عدم القدرة على التنبؤ مطلوبة.
كيفية استخدام معرّفات UUID في لغات البرمجة
// 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 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
// 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();
<?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
import uuid
# v4
uid = uuid.uuid4()
# v1
uid1 = uuid.uuid1()
# 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 get github.com/google/uuid
import "github.com/google/uuid"
id := uuid.New() // v4
id1 := uuid.NewUUID() // v1 (may return error)
// 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
// 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
// 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();
import java.util.UUID;
UUID id = UUID.randomUUID(); // v4
// 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 */ }