สำหรับการสร้าง UUID RFC9562 (อย่างเป็นทางการ RFC4122)
uuid
บันทึก
w> uuid@11
พร้อมใช้งานแล้ว: ดู CHANGELOG สำหรับรายละเอียด TL; DR:
@types/uuid
ออกจากการอ้างอิงของคุณ)options
arg สำหรับ 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'
... CommonJS:
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() | สร้าง UUID เวอร์ชัน 1 (การประทับเวลา) | |
uuid.v1ToV6() | สร้าง UUID เวอร์ชัน 6 จาก UUID เวอร์ชัน 1 | ใหม่ใน uuid@10 |
uuid.v3() | สร้าง UUID เวอร์ชัน 3 (เนมสเปซที่มี MD5) | |
uuid.v4() | สร้าง UUID เวอร์ชัน 4 (สุ่ม) | |
uuid.v5() | สร้าง UUID เวอร์ชัน 5 (เนมสเปซที่มี SHA-1) | |
uuid.v6() | สร้าง UUID เวอร์ชัน 6 (ประทับเวลา เรียงลำดับใหม่) | ใหม่ใน uuid@10 |
uuid.v6ToV1() | สร้าง UUID เวอร์ชัน 1 จาก UUID เวอร์ชัน 6 | ใหม่ใน uuid@10 |
uuid.v7() | สร้าง UUID เวอร์ชัน 7 (อิงตามเวลา Unix Epoch) | ใหม่ใน uuid@10 |
uuid.v8() | “จงใจเว้นว่างไว้” | |
uuid.validate() | ทดสอบสตริงเพื่อดูว่าเป็น UUID ที่ถูกต้องหรือไม่ | ใหม่ใน [email protected] |
uuid.version() | ตรวจหา UUID เวอร์ชัน RFC | ใหม่ใน [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 -like collection ของ 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'
สร้าง UUID ของ RFC เวอร์ชัน 1 (การประทับเวลา)
[ 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-10,000) |
[ 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 |
ผลตอบแทน | UUID String ถ้าไม่ได้ระบุ buffer มิฉะนั้นจะส่งคืน buffer |
พ่น | Error หากมีการร้องขอ UUID มากกว่า 10M/วินาที |
บันทึก
รหัสโหนดเริ่มต้น (ตัวเลข 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] "
สร้าง UUID ของ RFC เวอร์ชัน 4 (สุ่ม)
[ 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 |
ผลตอบแทน | UUID String ถ้าไม่ได้ระบุ 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 |
ผลตอบแทน | UUID String ถ้าไม่ได้ระบุ 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'
ตัวอย่างด้วยเนมสเปซ RFC URL
:
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'
สร้าง UUID ของ RFC เวอร์ชัน 7 (สุ่ม)
[ 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 |
ผลตอบแทน | UUID String ถ้าไม่ได้ระบุ buffer มิฉะนั้นจะส่งคืน buffer |
ตัวอย่าง:
import { v7 as uuidv7 } from 'uuid' ;
uuidv7 ( ) ; // ⇨ '01695553-c90c-705a-b56d-778dfbbd4bed'
“จงใจเว้นว่างไว้”
บันทึก
UUID เวอร์ชัน 8 (ทดลอง) มีไว้ "สำหรับกรณีการใช้งานแบบทดลองหรือเฉพาะผู้จำหน่าย" RFC ไม่ได้กำหนดอัลกอริธึมการสร้างสำหรับพวกเขา ซึ่งเป็นเหตุผลว่าทำไมแพ็คเกจนี้จึงไม่มีเมธอด v8()
อย่างไรก็ตาม วิธี validate()
และ version()
ใช้งานได้กับ UUID ดังกล่าว
ทดสอบสตริงเพื่อดูว่าเป็น 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
ตรวจหา UUID เวอร์ชัน RFC
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
สามารถสร้าง UUID ได้จากบรรทัดคำสั่งโดยใช้ uuid
$ npx uuid
ddeb27fb-d9a0-4624-be4d-4615062daed4
ค่าเริ่มต้นคือการสร้าง UUIDS เวอร์ชัน 4 อย่างไรก็ตาม รองรับเวอร์ชันอื่นๆ พิมพ์ 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
การจัดการสำหรับ Timestamp UUID ก่อนหน้า uuid@11
เป็นไปได้ที่สถานะ options
จะรบกวนสถานะภายในที่ใช้ในการประกันเอกลักษณ์ของ UUID ที่อิงการประทับเวลา (วิธี v1()
, v6()
และ v7()
) เริ่มต้นด้วย uuid@11
ปัญหานี้ได้รับการแก้ไขแล้วโดยใช้อาร์กิวเมนต์ options
ที่มีอยู่เป็นแฟล็กเพื่อเลือกระหว่างลักษณะการทำงานที่เป็นไปได้สองแบบ:
options
: สถานะภายในถูกใช้เพื่อปรับปรุงเอกลักษณ์ UUIDoptions
: ไม่ ใช้สถานะภายใน และใช้ค่าเริ่มต้นที่เหมาะสมแทนตามความจำเป็น เบราว์เซอร์ : บิลด์ uuid
ได้รับการทดสอบกับเดสก์ท็อป Chrome, Safari, Firefox และ Edge เวอร์ชันล่าสุด เบราว์เซอร์เดียวกันเวอร์ชันมือถือคาดว่าจะใช้งานได้แต่ยังไม่มีการทดสอบในขณะนี้
Node : uuid
builds ได้รับการทดสอบกับโหนด (รุ่น 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' ;
Markdown ที่สร้างจาก README_js.md โดย