لإنشاء RFC9562 (رسميًا RFC4122) UUIDs
uuid
ملحوظة
w> uuid@11
متاح الآن: راجع سجل التغيير للحصول على التفاصيل. ليرة تركية؛دكتور:
@types/uuid
من تبعياتك)options
لـ v1()
و v6()
و v7()
. انظر التفاصيلUint8Array
s. (قد يؤثر على مناديب parse()
أو stringify()
أو الذين يقومون بتمرير وسيطة option#buf
إلى v1()
- v7()
.) 1. التثبيت
npm install uuid
2. قم بإنشاء UUID
بناء جملة ESM (يجب استخدام عمليات التصدير المسماة):
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
... كومونجس:
const { v4 : uuidv4 } = require ( 'uuid' ) ;
uuidv4 ( ) ; // ⇨ '1b9d6bcd-bbfd-4b2d-9b5d-ab8dfbbd4bed'
بالنسبة لمعرفات UUID للطابع الزمني، ومعرفات UUID لمساحة الاسم، والخيارات الأخرى، اقرأ على ...
uuid.NIL | سلسلة UUID الصفرية (جميع الأصفار) | الجديد في [email protected] |
uuid.MAX | سلسلة UUID القصوى (جميعها) | الجديد في [email protected] |
uuid.parse() | تحويل سلسلة UUID إلى مجموعة من البايتات | الجديد في [email protected] |
uuid.stringify() | تحويل مجموعة من البايتات إلى سلسلة UUID | الجديد في [email protected] |
uuid.v1() | قم بإنشاء الإصدار 1 (الطابع الزمني) UUID | |
uuid.v1ToV6() | قم بإنشاء إصدار 6 UUID من الإصدار 1 UUID | جديد في uuid@10 |
uuid.v3() | قم بإنشاء الإصدار 3 (مساحة الاسم مع MD5) UUID | |
uuid.v4() | قم بإنشاء إصدار 4 (عشوائي) UUID | |
uuid.v5() | قم بإنشاء الإصدار 5 (مساحة الاسم مع SHA-1) UUID | |
uuid.v6() | قم بإنشاء الإصدار 6 (الطابع الزمني، المعاد ترتيبه) UUID | جديد في uuid@10 |
uuid.v6ToV1() | قم بإنشاء إصدار 1 UUID من الإصدار 6 UUID | جديد في uuid@10 |
uuid.v7() | قم بإنشاء إصدار 7 (يعتمد على وقت Unix Epoch) UUID | جديد في uuid@10 |
uuid.v8() | "تركت فارغة عمدا" | |
uuid.validate() | اختبر سلسلة لمعرفة ما إذا كانت UUID صالحة | الجديد في [email protected] |
uuid.version() | كشف إصدار RFC من UUID | الجديد في [email protected] |
سلسلة UUID الصفرية (جميع الأصفار).
مثال:
import { NIL as NIL_UUID } from 'uuid' ;
NIL_UUID ; // ⇨ '00000000-0000-0000-0000-000000000000'
الحد الأقصى لسلسلة UUID (كل الآحاد).
مثال:
import { MAX as MAX_UUID } from 'uuid' ;
MAX_UUID ; // ⇨ 'ffffffff-ffff-ffff-ffff-ffffffffffff'
تحويل سلسلة UUID إلى مجموعة من البايتات
str | String UUID صالحة |
يعود | Uint8Array[16] |
رميات | TypeError إذا لم يكن str معرف UUID صالحًا |
ملحوظة
ترتيب القيم في صفائف البايت المستخدمة بواسطة parse()
و stringify()
يتبع الترتيب الأيسر ↠ الأيمن للأزواج السداسية في سلاسل UUID. كما هو موضح في المثال أدناه.
مثال:
import { parse as uuidParse } from 'uuid' ;
// Parse a UUID
uuidParse ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨
// Uint8Array(16) [
// 110, 192, 189, 127, 17,
// 192, 67, 218, 151, 94,
// 42, 138, 217, 235, 174,
// 11
// ]
تحويل مجموعة من البايتات إلى سلسلة UUID
arr | مجموعة تشبه Array مكونة من 16 قيمة (تبدأ من offset ) بين 0-255. |
[ offset = 0] | فهرس بداية Number في المصفوفة |
يعود | String |
رميات | TypeError إذا تعذر إنشاء سلسلة UUID صالحة |
ملحوظة
ترتيب القيم في صفائف البايت المستخدمة بواسطة parse()
و stringify()
يتبع الترتيب الأيسر ↠ الأيمن للأزواج السداسية في سلاسل UUID. كما هو موضح في المثال أدناه.
مثال:
import { stringify as uuidStringify } from 'uuid' ;
const uuidBytes = Uint8Array . of (
0x6e ,
0xc0 ,
0xbd ,
0x7f ,
0x11 ,
0xc0 ,
0x43 ,
0xda ,
0x97 ,
0x5e ,
0x2a ,
0x8a ,
0xd9 ,
0xeb ,
0xae ,
0x0b
) ;
uuidStringify ( uuidBytes ) ; // ⇨ '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b'
قم بإنشاء إصدار RFC 1 (الطابع الزمني) UUID
[ options ] | Object يتمتع بواحدة أو أكثر من الخصائص التالية: |
[ options.node = (random) ] | حقل "عقدة" RFC Array[6] من قيم البايت (لكل 4.1.6) |
[ options.clockseq = (random) ] | RFC "تسلسل الساعة" Number بين 0 - 0x3fff |
[ options.msecs = (current time) ] | حقل "الطابع الزمني" لـ RFC ( Number المللي ثانية، عصر يونكس) |
[ options.nsecs = 0 ] | حقل "الطابع الزمني" لـ RFC (يجب أن يكون Number النانو ثانية المراد إضافتها إلى msecs من 0 إلى 10000) |
[ options.random = (random) ] | Array من 16 بايت عشوائي (0-255) يستخدم لإنشاء حقول أخرى أعلاه |
[ options.rng ] | بديل options.random ، Function تُرجع مصفوفة Array من 16 بايت عشوائي (0-255) |
[ buffer ] | Array | Buffer إذا تم تحديده، ستتم كتابة uuid هنا على شكل بايت، بدءًا من offset |
[ offset = 0] | فهرس Number لبدء كتابة بايتات UUID في buffer |
يعود | String UUID إذا لم يتم تحديد buffer ، وإلا فسيتم إرجاع buffer |
رميات | Error إذا تم طلب أكثر من 10 مليون UUID/ثانية |
ملحوظة
يتم إنشاء معرف العقدة الافتراضي (آخر 12 رقمًا في UUID) مرة واحدة، بشكل عشوائي، عند بدء العملية، ثم يظل بدون تغيير طوال مدة العملية.
ملحوظة
تكون options.random
و options.rng
ذات معنى فقط عند الاستدعاء الأول إلى v1()
، حيث يمكن تمريرهما لتهيئة node
الداخلية وحقول clockseq
.
مثال:
import { v1 as uuidv1 } from 'uuid' ;
uuidv1 ( ) ; // ⇨ '2c5ea4c0-4067-11e9-9bdd-2b0d7b3dcb6d'
مثال باستخدام options
:
import { v1 as uuidv1 } from 'uuid' ;
const options = {
node : Uint8Array . of ( 0x01 , 0x23 , 0x45 , 0x67 , 0x89 , 0xab ) ,
clockseq : 0x1234 ,
msecs : new Date ( '2011-11-01' ) . getTime ( ) ,
nsecs : 5678 ,
} ;
uuidv1 ( options ) ; // ⇨ '710b962e-041c-11e1-9234-0123456789ab'
تحويل UUID من الإصدار 1 إلى الإصدار 6
import { v1ToV6 } from 'uuid' ;
v1ToV6 ( '92f62d9e-22c4-11ef-97e9-325096b39f47' ) ; // ⇨ '1ef22c49-2f62-6d9e-97e9-325096b39f47'
قم بإنشاء إصدار RFC 3 (مساحة الاسم مع MD5) UUID
واجهة برمجة التطبيقات (API) مطابقة لـ v5()
، ولكنها تستخدم "v3" بدلاً من ذلك.
مهم
وفقًا لـ RFC، " إذا لم يكن التوافق مع الإصدارات السابقة يمثل مشكلة، فيفضل SHA-1 [الإصدار 5] ."
قم بإنشاء إصدار RFC 4 (عشوائي) UUID
[ options ] | Object يتمتع بواحدة أو أكثر من الخصائص التالية: |
[ options.random ] | Array من 16 بايت عشوائي (0-255) |
[ options.rng ] | بديل options.random ، Function تُرجع مصفوفة Array من 16 بايت عشوائي (0-255) |
[ buffer ] | Array | Buffer إذا تم تحديده، ستتم كتابة uuid هنا على شكل بايت، بدءًا من offset |
[ offset = 0] | فهرس Number لبدء كتابة بايتات UUID في buffer |
يعود | String UUID إذا لم يتم تحديد buffer ، وإلا فسيتم إرجاع buffer |
مثال:
import { v4 as uuidv4 } from 'uuid' ;
uuidv4 ( ) ; // ⇨ '9b1deb4d-3b7d-4bad-9bdd-2b0d7b3dcb6d'
مثال باستخدام قيم random
محددة مسبقًا:
import { v4 as uuidv4 } from 'uuid' ;
const v4options = {
random : Uint8Array . of (
0x10 ,
0x91 ,
0x56 ,
0xbe ,
0xc4 ,
0xfb ,
0xc1 ,
0xea ,
0x71 ,
0xb4 ,
0xef ,
0xe1 ,
0x67 ,
0x1c ,
0x58 ,
0x36
) ,
} ;
uuidv4 ( v4options ) ; // ⇨ '109156be-c4fb-41ea-b1b4-efe1671c5836'
قم بإنشاء إصدار RFC 5 (مساحة الاسم مع SHA-1) UUID
name | String | Array |
namespace | String | Array[16] مساحة الاسم UUID |
[ buffer ] | Array | Buffer إذا تم تحديده، ستتم كتابة uuid هنا على شكل بايت، بدءًا من offset |
[ offset = 0] | فهرس Number لبدء كتابة بايتات UUID في buffer |
يعود | String UUID إذا لم يتم تحديد buffer ، وإلا فسيتم إرجاع buffer |
ملحوظة
تتوفر مساحات أسماء RFC DNS
و URL
كـ v5.DNS
و v5.URL
.
مثال مع مساحة الاسم المخصصة:
import { v5 as uuidv5 } from 'uuid' ;
// Define a custom namespace. Readers, create your own using something like
// https://www.uuidgenerator.net/
const MY_NAMESPACE = '1b671a64-40d5-491e-99b0-da01ff1f3341' ;
uuidv5 ( 'Hello, World!' , MY_NAMESPACE ) ; // ⇨ '630eb68f-e0fa-5ecc-887a-7c7a62614681'
مثال مع مساحة اسم URL
لـ RFC:
import { v5 as uuidv5 } from 'uuid' ;
uuidv5 ( 'https://www.w3.org/' , uuidv5 . URL ) ; // ⇨ 'c106a26a-21bb-5538-8bf2-57095d1976c1'
قم بإنشاء إصدار RFC 6 (الطابع الزمني، مُعاد ترتيبه) UUID
تأخذ هذه الطريقة نفس الوسائط مثل uuid.v1().
import { v6 as uuidv6 } from 'uuid' ;
uuidv6 ( ) ; // ⇨ '1e940672-c5ea-64c0-9b5d-ab8dfbbd4bed'
مثال باستخدام options
:
import { v6 as uuidv6 } from 'uuid' ;
const options = {
node : [ 0x01 , 0x23 , 0x45 , 0x67 , 0x89 , 0xab ] ,
clockseq : 0x1234 ,
msecs : new Date ( '2011-11-01' ) . getTime ( ) ,
nsecs : 5678 ,
} ;
uuidv6 ( options ) ; // ⇨ '1e1041c7-10b9-662e-9234-0123456789ab'
تحويل UUID من الإصدار 6 إلى الإصدار 1
import { v6ToV1 } from 'uuid' ;
v6ToV1 ( '1ef22c49-2f62-6d9e-97e9-325096b39f47' ) ; // ⇨ '92f62d9e-22c4-11ef-97e9-325096b39f47'
قم بإنشاء إصدار RFC 7 (عشوائي) UUID
[ options ] | Object يتمتع بواحدة أو أكثر من الخصائص التالية: |
[ options.msecs = (current time) ] | حقل "الطابع الزمني" لـ RFC ( Number المللي ثانية، عصر يونكس) |
[ options.random = (random) ] | Array من 16 بايت عشوائي (0-255) يستخدم لإنشاء حقول أخرى أعلاه |
[ options.rng ] | بديل options.random ، Function تُرجع مصفوفة Array من 16 بايت عشوائي (0-255) |
[ options.seq = (random) ] | Number تسلسل 32 بت بين 0 - 0xffffffff. قد يتم توفير ذلك للمساعدة في ضمان التفرد لمعرفات UUID التي تم إنشاؤها خلال نفس الفاصل الزمني بالمللي ثانية. الافتراضي = قيمة عشوائية. |
[ buffer ] | Array | Buffer إذا تم تحديده، ستتم كتابة uuid هنا على شكل بايت، بدءًا من offset |
[ offset = 0] | فهرس Number لبدء كتابة بايتات UUID في buffer |
يعود | String UUID إذا لم يتم تحديد buffer ، وإلا فسيتم إرجاع buffer |
مثال:
import { v7 as uuidv7 } from 'uuid' ;
uuidv7 ( ) ; // ⇨ '01695553-c90c-705a-b56d-778dfbbd4bed'
"تركت فارغة عمدا"
ملحوظة
الإصدار 8 (التجريبي) UUIDs مخصص "لحالات الاستخدام التجريبية أو الخاصة بالبائع". لا يحدد RFC خوارزمية إنشاء لها، ولهذا السبب لا تقدم هذه الحزمة طريقة v8()
. ومع ذلك، فإن طريقتي validate()
و version()
تعملان مع UUIDs كهذه.
اختبر سلسلة لمعرفة ما إذا كانت UUID صالحة
str | String للتحقق من صحتها |
يعود | true إذا كانت السلسلة UUID صالحة، وإلا false |
مثال:
import { validate as uuidValidate } from 'uuid' ;
uuidValidate ( 'not a UUID' ) ; // ⇨ false
uuidValidate ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ true
باستخدام validate
version
معًا، من الممكن إجراء التحقق من صحة كل إصدار، على سبيل المثال، التحقق من صحة معرفات UUIds v4 فقط.
import { version as uuidVersion } from 'uuid' ;
import { validate as uuidValidate } from 'uuid' ;
function uuidValidateV4 ( uuid ) {
return uuidValidate ( uuid ) && uuidVersion ( uuid ) === 4 ;
}
const v1Uuid = 'd9428888-122b-11e1-b85c-61cd3cbb3210' ;
const v4Uuid = '109156be-c4fb-41ea-b1b4-efe1671c5836' ;
uuidValidateV4 ( v4Uuid ) ; // ⇨ true
uuidValidateV4 ( v1Uuid ) ; // ⇨ false
كشف إصدار RFC من UUID
str | String UUID صالحة |
يعود | Number إصدار RFC لـ UUID |
رميات | TypeError إذا لم يكن str معرف UUID صالحًا |
مثال:
import { version as uuidVersion } from 'uuid' ;
uuidVersion ( '45637ec4-c85f-11ea-87d0-0242ac130003' ) ; // ⇨ 1
uuidVersion ( '6ec0bd7f-11c0-43da-975e-2a8ad9ebae0b' ) ; // ⇨ 4
ملحوظة
تقوم هذه الطريقة بإرجاع 0
لـ NIL
UUID و 15
لـ MAX
UUID.
يمكن إنشاء UUIDs من سطر الأوامر باستخدام uuid
.
$ npx uuid
ddeb27fb-d9a0-4624-be4d-4615062daed4
الإعداد الافتراضي هو إنشاء الإصدار 4 UUIDS، إلا أن الإصدارات الأخرى مدعومة. اكتب uuid --help
للحصول على التفاصيل:
$ npx uuid --help
Usage:
uuid
uuid v1
uuid v3 < name > < namespace uuid >
uuid v4
uuid v5 < name > < namespace uuid >
uuid v7
uuid --help
Note: < namespace uuid > may be " URL " or " DNS " to use the corresponding UUIDs
defined by RFC9562
options
UUIDs للطابع الزمني قبل uuid@11
، كان من الممكن أن تتداخل حالة options
مع الحالة الداخلية المستخدمة لضمان تفرد UUIDs المستندة إلى الطابع الزمني (الطرق v1()
و v6()
و v7()
). بدءًا من uuid@11
، تمت معالجة هذه المشكلة باستخدام وجود وسيطة options
كعلامة للاختيار بين سلوكين محتملين:
options
: يتم استخدام الحالة الداخلية لتحسين تفرد UUID.options
: لا يتم استخدام الحالة الداخلية، وبدلاً من ذلك، يتم تطبيق الإعدادات الافتراضية المناسبة حسب الحاجة. المتصفحات : يتم اختبار إصدارات uuid
مقابل أحدث إصدار من Chrome وSafari وFirefox وEdge لسطح المكتب. من المتوقع أن تعمل إصدارات الأجهزة المحمولة من هذه المتصفحات نفسها ولكن لم يتم اختبارها حاليًا.
العقدة : يتم اختبار بنيات uuid
مقابل العقدة (إصدارات LTS)، بالإضافة إلى عقدة سابقة. على سبيل المثال، فإن node@18
في وضع الصيانة، node@22
هي إصدار LTS الحالي. لذلك يدعم uuid
node@16
- node@22
.
Typescript : يتم دعم إصدارات TS التي تم إصدارها خلال العامين الماضيين. مصدر
react-native-get-random-values
uuid
. نظرًا لأن uuid
قد يظهر أيضًا باعتباره تبعية متعدية لبعض الواردات الأخرى، فمن الأكثر أمانًا استيراد react-native-get-random-values
كأول شيء في نقطة الدخول الخاصة بك: import 'react-native-get-random-values' ;
import { v4 as uuidv4 } from 'uuid' ;
تم إنشاء تخفيض السعر من README_js.md بواسطة