ข้ามไปยังเนื้อหา

เครื่องมือสร้าง UUID ฟรี - สร้าง UUID เวอร์ชัน 1 และ 4 ได้ทันที

สร้างตัวระบุเอกลักษณ์ได้ทันทีด้วยเครื่องมือสร้าง UUID ฟรีของเรา สร้าง UUID เวอร์ชัน 1 (อ้างอิงเวลา) และเวอร์ชัน 4 (สุ่ม) สำหรับฐานข้อมูล API และระบบกระจาย

เครื่องมือสร้าง UUID

เวอร์ชัน UUID
UUID ที่สร้างขึ้น
เครื่องคำนวณโหลด...
📚

เอกสารประกอบการใช้งาน

เครื่องมือสร้าง UUID

เครื่องมือสร้าง UUID คือเครื่องมือที่สร้างตัวระบุที่ไม่ซ้ำกันทั่วโลก หรือ UUID ซึ่งเป็นรหัสขนาด 128 บิตที่ใช้ระบุข้อมูลชิ้นหนึ่ง เพื่อไม่ให้รายการอื่นใดในที่ใดก็ตามมีป้ายกำกับเดียวกันได้โดยง่าย หน้านี้สร้าง UUID รุ่น 1 (อิงตามเวลา) และรุ่น 4 (สุ่ม)

UUID คืออะไร?

UUID คือจำนวนขนาด 128 บิตที่เขียนเป็นเลขฐานสิบหก 32 หลัก (อักขระ 0–9 และ a-f) แบ่งออกเป็นห้ากลุ่มคั่นด้วยยัติภังค์ ตามรูปแบบ 8-4-4-4-12 รวมทั้งหมด 36 อักขระ ตัวอย่าง UUID มีลักษณะดังนี้:

1550e8400-e29b-41d4-a716-446655440000
2

UUID กำหนดโดย RFC 9562 ซึ่งเผยแพร่โดย Internet Engineering Task Force ในเดือนพฤษภาคม 2024 และมาแทนที่ RFC 4122 ฉบับเก่าจากปี 2005 เอกสารทั้งสองฉบับอธิบายรูปแบบขนาด 128 บิตเดียวกัน ซอฟต์แวร์ใช้ UUID เพื่อระบุแถวในฐานข้อมูล ไฟล์ เซสชันผู้ใช้ และระเบียนอื่น ๆ โดยไม่ต้องมีหน่วยงานกลางแจกจ่ายหมายเลข เนื่องจากจำนวน UUID ที่เป็นไปได้มีมาก คอมพิวเตอร์สองเครื่องจึงสามารถสร้าง UUID ได้อย่างอิสระในเวลาเดียวกัน และแทบไม่สร้างค่าเดียวกัน

รูปแบบและโครงสร้างของ UUID

บิตทั้ง 128 ของ UUID แบ่งออกเป็นฟิลด์ที่มีชื่อ แต่ละฟิลด์ใช้บิตจำนวนคงที่:

  • time_low - 32 บิต
  • time_mid - 16 บิต
  • time_hi_and_version - 16 บิต
  • clock_seq_hi_and_reserved - 8 บิต
  • clock_seq_low - 8 บิต
  • node - 48 บิต
โครงร่างฟิลด์ UUID time_low time_mid time_hi seq_hi seq_lo node time_low: 32 bits time_mid: 16 bits time_hi_and_version: 16 bits clock_seq_hi_and_reserved: 8 bits clock_seq_low: 8 bits node: 48 bits

บิตสี่บิตภายใน time_hi_and_version เก็บหมายเลขรุ่นของ UUID และบิตสองบิตภายใน clock_seq_hi_and_reserved เก็บค่าตัวแปรรูปแบบ ซึ่งกำหนดให้ซอฟต์แวร์อ่านฟิลด์ที่เหลืออย่างไร มีการกำหนดไว้ทั้งหมดแปดรุ่น

ชื่อฟิลด์ข้างต้นมาจากรุ่น 1 ซึ่งเดิมเก็บค่าเวลาและโหนดจริง รุ่นอื่นยังคงใช้โครงร่าง 8-4-4-4-12 และขอบเขตฟิลด์เดิม แต่เติมบิตส่วนใหญ่ด้วยข้อมูลสุ่ม ใน UUID รุ่น 4 กลุ่มที่มีป้ายกำกับ time_low เป็นค่าสุ่ม ไม่ใช่เวลา

วิธีสร้าง UUID ด้วยเครื่องมือนี้

  1. เลือกรุ่น: รุ่น 1 (อิงตามเวลา) หรือรุ่น 4 (สุ่ม)
  2. อ่าน UUID จากกล่องผลลัพธ์ ค่าใหม่จะแสดงทันทีที่หน้าเว็บโหลดหรือเมื่อเปลี่ยนรุ่น
  3. เลือก “Generate” เพื่อสร้างค่าใหม่อีกค่า
  4. เลือก “Copy” เพื่อคัดลอกผลลัพธ์ไปยังคลิปบอร์ด แล้ววางลงในโค้ด ฐานข้อมูล หรือไฟล์กำหนดค่า

แผงด้านล่างผลลัพธ์จะแยก UUID ออกเป็นห้าฟิลด์และระบุชื่อของแต่ละฟิลด์ ทำให้ค้นหาเลขรุ่นและเลขตัวแปรรูปแบบได้ง่าย

รุ่น 4 เหมาะกับงานส่วนใหญ่ รวมถึงคีย์ฐานข้อมูลและโทเค็นเซสชัน เพราะไม่มีข้อมูลว่าถูกสร้างขึ้นเมื่อใดหรือที่ใด รุ่น 1 เหมาะกับระเบียนที่ต้องกู้คืนเวลาสร้างจากตัวระบุเอง เช่น รายการในล็อก

UUID รุ่น 1 เทียบกับรุ่น 4

รุ่น 1 เข้ารหัสเวลาประทับปัจจุบัน พร้อมลำดับนาฬิกาและค่าโหนดที่สุ่มเลือก มาตรฐานอนุญาตให้ค่าโหนดเป็นที่อยู่เครือข่ายจริงของคอมพิวเตอร์ (MAC) แต่ก็อนุญาตให้ใช้ค่าโหนดที่สร้างแบบสุ่มเป็นทางเลือกเพื่อปกป้องความเป็นส่วนตัว เครื่องมือนี้ใช้ตัวเลือกสุ่มเสมอ ดังนั้น UUID รุ่น 1 ที่สร้างโดยเครื่องมือนี้จึงไม่อ่านหรือเปิดเผยที่อยู่ MAC จริง มาตรฐานยังกำหนดให้บิตต่ำสุดของไบต์แรกในฟิลด์โหนดมีค่า 1 เมื่อใช้ค่าโหนดสุ่ม และเครื่องมือนี้ก็กำหนดเช่นนั้น การ์ดเครือข่ายจริงไม่เคยตั้งบิตนี้ไว้ ดังนั้นจึงไม่อาจเข้าใจผิดว่าค่าโหนดสุ่มเป็นค่าโหนดจริง นี่คือเหตุผลที่เลขฐานสิบหกหลักที่สองของกลุ่มที่ห้ามีค่าเป็นเลขคี่เสมอใน UUID รุ่น 1 จากหน้านี้ ได้แก่ 1, 3, 5, 7, 9, b, d หรือ f

สามารถอ่านเวลาประทับภายใน UUID รุ่น 1 กลับคืนได้ จึงจัดระเบียนตามลำดับการสร้างได้ การเรียงข้อความ UUID โดยตรงไม่ให้ผลเช่นนั้น เพราะกลุ่มแรกเก็บบิตต่ำสุด 32 บิตของเวลาประทับ ซึ่งวนกลับประมาณทุก 7 นาที รุ่น 6 ที่เพิ่มใน RFC 9562 เก็บเวลาประทับเดียวกันโดยวางบิตสูงไว้ก่อน ทำให้การเรียงข้อความธรรมดาใช้ได้

รุ่น 4 สร้างจากบิตสุ่ม โดยมีการกำหนดค่าบิตบางส่วนไว้ตายตัวเพื่อระบุรุ่นและตัวแปรรูปแบบ ไม่มีเวลาประทับหรือข้อมูลเฉพาะเครื่อง จึงไม่เปิดเผยว่าถูกสร้างเมื่อใดหรือที่ใด และไม่สามารถเรียงตามลำดับการสร้างได้

มาตรฐานมีอีกรุ่นหกรุ่น แต่เครื่องมือนี้ไม่สร้าง ได้แก่ รุ่น 2 (DCE Security ซึ่งใช้น้อย); รุ่น 3 และรุ่น 5 ที่สร้างโดยแฮชเนมสเปซและชื่อด้วย MD5 หรือ SHA-1 ทำให้อินพุตเดียวกันสร้าง UUID เดิมเสมอ; และรุ่น 6, 7 และ 8 ซึ่งเพิ่มโดย RFC 9562 ใน (24,300 ซม.) 2024 สำหรับตัวระบุที่จัดเรียงได้และตัวระบุแบบกำหนดเอง

วิธีคำนวณ UUID (สูตร)

รุ่น 4:

  1. สร้างบิตสุ่ม 128 บิต
  2. กำหนดบิตรุ่นสี่บิต ซึ่งเป็นเลขฐานสิบหกหลักแรกของกลุ่มที่สาม ให้เป็น 0100 (เลขฐานสิบหก 4)
  3. กำหนดบิตสองบิตบนสุดของกลุ่มที่สี่ให้เป็น 10 (ดังนั้นเลขฐานสิบหกหลักแรกของกลุ่มนั้นจึงเป็น 8, 9, a หรือ b)

มีเพียง 122 จากบิตทั้งหมด 128 บิตที่เป็นค่าสุ่มจริง เนื่องจาก 6 บิตถูกกำหนดตายตัวโดยขั้นตอน 2 และ 3 จึงมี UUID รุ่น 4 ที่เป็นไปได้จำนวน 2^122 หรือประมาณ 5.3 × 10^36 ค่า

รุ่น 1:

  1. ใช้เวลาปัจจุบันเป็นจำนวนช่วงเวลา 100 นาโนวินาทีตั้งแต่ 15 ตุลาคม ค.ศ. 1582 ซึ่งเป็นวันที่มีการปฏิรูปปฏิทินเกรกอเรียน ในทางปฏิบัติคือเวลา Unix ปกติในหน่วยมิลลิวินาทีบวก 12,219,292,800,000 แล้วคูณทั้งหมดด้วย 10,000
  2. แบ่งจำนวน 60 บิตนั้นลงในสามฟิลด์: บิตต่ำสุด 32 บิตใส่ใน time_low, 16 บิตถัดไปใส่ใน time_mid และบิตสูงสุด 12 บิตใส่ใน time_hi_and_version
  3. สร้างลำดับนาฬิกา 14 บิต เพื่อป้องกันการชนกันเมื่อมีการปรับนาฬิกาของระบบย้อนกลับ
  4. สร้างค่าโหนดขนาด 48 บิต โดยกำหนดบิตต่ำสุดของไบต์แรกเป็น 1
  5. กำหนดบิตรุ่นเป็น 0001 และบิตตัวแปรรูปแบบเป็น 10

ใน UUID ทุกรุ่น พื้นที่ขนาดเต็ม 128 บิตเก็บค่าได้ 2^128 ค่า หรือประมาณ 3.4 × 10^38 ค่า จำนวนนี้มากจนการชนกันแบบสุ่มไม่ใช่ปัญหาในทางปฏิบัติ

ตัวอย่างพร้อมวิธีทำ

การอ่าน UUID รุ่น 4 ใช้ตัวอย่างก่อนหน้านี้: 550e8400-e29b-41d4-a716-446655440000

  • กลุ่มที่สาม 41d4: หลักแรกคือ 4 แสดงว่านี่เป็น UUID รุ่น 4
  • กลุ่มที่สี่ a716: หลักแรกคือ a (เลขฐานสอง 1010) เริ่มต้นด้วย 10 ซึ่งเป็นบิตตัวแปรรูปแบบที่กำหนด
  • เลขฐานสิบหกที่เหลือคือข้อมูลสุ่ม

โปรแกรมที่อ่าน UUID นี้จะตรวจสอบเลขรุ่น 4 และบิตตัวแปรรูปแบบ 10 เพื่อยืนยันรูปแบบ จากนั้นถือว่าส่วนที่เหลือเป็นค่าสุ่มที่ไม่ตีความ

การสร้าง UUID รุ่น 1 สมมติว่านาฬิกาแสดงเวลา 1,700,000,000,000 มิลลิวินาทีของเวลา Unix ซึ่งตรงกับ 14 พฤศจิกายน ค.ศ. 2023 เวลา 22:13:20 UTC

  1. บวกค่าออฟเซ็ต: 1,700,000,000,000 + 12,219,292,800,000 = 13,919,292,800,000 มิลลิวินาที
  2. คูณด้วย 10,000 เพื่อให้ได้ช่วงเวลา 100 นาโนวินาที: 139,192,928,000,000,000 ในเลขฐานสิบหกคือ 01EE833B04AFC000
  3. แบ่งค่า: time_low = 04AFC000 (เลขฐานสิบหก 8 หลักต่ำสุด), time_mid = 833B (4 หลักถัดไป) และบิต 12 บิตบนสุดคือ 1EE
  4. ใส่หลักรุ่น 1 ไว้หน้า 1EE ได้ time_hi_and_version = 11EE

UUID จึงมีรูปแบบ 04afc000-833b-11ee- ตามด้วยลำดับนาฬิกาและค่าโหนด ซอฟต์แวร์สามารถย้อนกลับสี่ขั้นตอนนี้เพื่อกู้คืน 14 พฤศจิกายน ค.ศ. 2023 จากตัวระบุ

การใช้งาน UUID ที่พบบ่อย

  • คีย์หลักในฐานข้อมูล โดยเฉพาะเมื่อเซิร์ฟเวอร์หลายเครื่องสร้างระเบียนพร้อมกันโดยไม่ตรวจสอบกับเซิร์ฟเวอร์อื่น
  • โทเค็นเซสชันและคีย์ API โดยปกติใช้รุ่น 4 เพื่อความเป็นส่วนตัว
  • ตัวระบุสำหรับไฟล์ เหตุการณ์ และทรัพยากรในระบบกระจาย เช่น ไมโครเซอร์วิส
  • รหัสอุปกรณ์ในเครือข่าย IoT ขนาดใหญ่ ซึ่งอุปกรณ์แต่ละเครื่องสามารถสร้างรหัสของตนเองแบบออฟไลน์

ข้อแลกเปลี่ยนหลักคือขนาด: UUID ใช้พื้นที่จัดเก็บ 16 ไบต์ เทียบกับ 4 หรือ 8 ไบต์สำหรับตัวนับจำนวนเต็มอย่างง่าย และฐานข้อมูลบางระบบจัดทำดัชนี UUID ได้ช้ากว่าจำนวนเต็มเรียงลำดับ

ทางเลือกอื่นนอกเหนือจาก UUID

จำนวนเต็มแบบเพิ่มอัตโนมัติมีขนาดเล็กและง่ายกว่า แต่ทำงานได้ไม่ดีเมื่อมีเซิร์ฟเวอร์มากกว่าหนึ่งเครื่องที่ต้องแจกจ่าย ID อย่างอิสระ Snowflake ID ซึ่งพัฒนาที่ Twitter รวมเวลาประทับเข้ากับรหัสเวิร์กเกอร์ เพื่อสร้างตัวระบุขนาดกะทัดรัดที่เรียงลำดับได้ในระบบกระจาย ULID (ตัวระบุที่ไม่ซ้ำกันทั่วโลกและเรียงตามลำดับพจนานุกรมได้) เป็นรูปแบบใหม่กว่าที่ออกแบบให้ทั้งสุ่มและเรียงตามเวลาสร้างได้ ต่างจาก UUID รุ่นมาตรฐาน 4

ประวัติมาตรฐาน UUID

แนวคิด UUID เริ่มขึ้นในช่วงทศวรรษ 1980 ที่ Apollo Computer ในฐานะส่วนหนึ่งของ Network Computing System ต่อมา Open Software Foundation นำรูปแบบนี้ไปใช้กับ Distributed Computing Environment Internet Engineering Task Force เผยแพร่ RFC 4122 ใน (10,500 ซม.) 2005 และแทนที่ด้วย RFC 9562 ในเดือนพฤษภาคม 2024 RFC 9562 ยังคงทำให้ทุกรุ่นก่อนหน้าใช้งานได้โดยไม่เปลี่ยนแปลง และเพิ่มรุ่น 6, 7 และ 8

คำถามที่พบบ่อย

เครื่องมือสร้าง UUID ใช้ทำอะไร เครื่องมือนี้สร้างตัวระบุที่ไม่ซ้ำกันสำหรับฐานข้อมูล ระบบกระจาย โทเค็นเซสชัน คีย์ API และรหัสอุปกรณ์ เพื่อไม่ให้ระเบียนสองรายการต้องใช้ตัวระบุเดียวกัน

UUID v1 กับ v4 ต่างกันอย่างไร รุ่น 1 เข้ารหัสเวลาประทับที่ซอฟต์แวร์สามารถอ่านกลับเพื่อกู้คืนเวลาสร้างได้ รุ่น 4 เป็นค่าสุ่มทั้งหมดและไม่มีเวลาประทับ ผลลัพธ์รุ่น 1 ของเครื่องมือนี้ใช้ค่าโหนดที่สร้างแบบสุ่มแทนที่อยู่ MAC จริง จึงไม่เปิดเผยข้อมูลที่ระบุเครื่องได้เช่นกัน

รุ่น 1 เปิดเผยที่อยู่ MAC ของฉันหรือไม่ ไม่เปิดเผยเมื่อใช้เครื่องมือนี้ มาตรฐานอนุญาตให้ฟิลด์โหนดของ UUID รุ่น 1 เก็บที่อยู่ MAC จริงได้ แต่เครื่องมือนี้เติมฟิลด์ดังกล่าวด้วยบิตสุ่มเสมอ และกำหนดบิตที่ระบุว่าค่านี้ไม่ใช่ที่อยู่เครือข่ายจริง

UUID รับประกันว่าไม่ซ้ำกันหรือไม่ ไม่มีรูปแบบตัวระบุใดรับประกันความไม่ซ้ำกันอย่างสมบูรณ์ได้ แต่พื้นที่ขนาด 128 บิตมีค่าที่เป็นไปได้ประมาณ 3.4 × 10^38 ค่า และ UUID รุ่น 4 มีค่าสุ่มที่เป็นไปได้ประมาณ 5.3 × 10^36 ค่า โอกาสเกิดค่าซ้ำมีน้อยจนไม่จำเป็นต้องคำนึงถึงในการใช้งานจริงเกือบทุกกรณี

ใช้ UUID เป็นคีย์หลักของฐานข้อมูลได้หรือไม่ ได้ UUID ทำงานได้ดีในฐานะคีย์หลักของระบบกระจาย เพราะโหนดใด ๆ สามารถสร้าง UUID ได้โดยไม่ต้องตรวจสอบกับเซิร์ฟเวอร์กลาง ต้นทุนคือพื้นที่จัดเก็บ 16 ไบต์ต่อคีย์ ซึ่งมากกว่าจำนวนเต็มทั่วไป และประสิทธิภาพดัชนีอาจช้าลงในตารางขนาดใหญ่มาก

UUID เหมือนกับ GUID หรือไม่ เหมือนกัน GUID (ตัวระบุที่ไม่ซ้ำกันทั่วโลก) เป็นชื่อที่ Microsoft ใช้เรียกแนวคิดเดียวกับ UUID ซึ่ง RFC 4122 กำหนดไว้ว่าเป็น UUID

UUID รุ่น 4 สามารถเรียงตามเวลาที่สร้างได้หรือไม่ ไม่ได้ UUID รุ่น 4 เป็นค่าสุ่ม จึงไม่มีข้อมูลว่าเกิดขึ้นเมื่อใด UUID รุ่น 1 มีข้อมูลดังกล่าว แต่ต้องถอดรหัสก่อน การเรียงข้อความไม่ได้ให้ลำดับการสร้าง รุ่น 6 รุ่น 7 และ ULID ออกแบบมาให้เรียงโดยตรงในรูปข้อความ

เอกสารอ้างอิง

  1. Davis, K., Peabody, B., & Leach, P. (2024). Universally Unique IDentifiers (UUIDs). RFC 9562. https://www.rfc-editor.org/rfc/rfc9562
  2. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://www.rfc-editor.org/rfc/rfc4122
  3. ตัวระบุที่ไม่ซ้ำกันทั่วโลก ใน Wikipedia https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID ใน Wikipedia https://en.wikipedia.org/wiki/Snowflake_ID
  5. ข้อกำหนด ULID GitHub https://github.com/ulid/spec