เครื่องมือสร้าง UUID สำหรับแอปพลิเคชันต่างๆ
สร้างตัวระบุที่ไม่ซ้ำกันทั่วโลก (UUID) สำหรับแอปพลิเคชันต่างๆ สร้าง UUID เวอร์ชัน 1 (ตามเวลา) และเวอร์ชัน 4 (แบบสุ่ม) เพื่อใช้ในระบบกระจาย ฐานข้อมูล และอื่นๆ
เครื่องสร้าง UUID
UUID ที่สร้างขึ้น
เอกสารประกอบ
UUID Generator
Introduction
UUID (Universally Unique Identifier) เป็นหมายเลข 128 บิตที่ใช้ในการระบุข้อมูลในระบบคอมพิวเตอร์ UUID ได้รับการมาตรฐานโดย Open Software Foundation (OSF) เป็นส่วนหนึ่งของ Distributed Computing Environment (DCE) ตัวระบุเหล่านี้ถูกออกแบบมาให้มีเอกลักษณ์เฉพาะตัวทั้งในเชิงพื้นที่และเวลา ทำให้เหมาะสมกับการใช้งานต่างๆ ในระบบกระจายและอื่นๆ
เครื่องมือสร้าง UUID นี้ช่วยให้คุณสามารถสร้าง UUID เวอร์ชัน 1 (ตามเวลา) และเวอร์ชัน 4 (สุ่ม) ตัวระบุนั้นมีประโยชน์ในสถานการณ์ต่างๆ ที่ต้องการการระบุที่ไม่ซ้ำกัน เช่น คีย์ฐานข้อมูล ระบบกระจาย และโปรโตคอลเครือข่าย
How UUIDs Work
UUID Structure
UUID มักจะแสดงเป็น 32 หลักฐานฐานสิบหก แสดงในห้ากลุ่มที่แยกด้วยขีดกลางในรูปแบบ 8-4-4-4-12 รวมทั้งหมด 36 ตัวอักษร (32 ตัวอักษรและ 4 ขีดกลาง) ตัวอย่างเช่น:
1550e8400-e29b-41d4-a716-446655440000
2
128 บิตของ UUID จะแบ่งออกเป็นฟิลด์เฉพาะ โดยแต่ละฟิลด์มีข้อมูลที่แตกต่างกันขึ้นอยู่กับเวอร์ชันของ UUID:
- 32 บิตสำหรับฟิลด์ time_low
- 16 บิตสำหรับฟิลด์ time_mid
- 16 บิตสำหรับฟิลด์ time_hi_and_version
- 8 บิตสำหรับฟิลด์ clock_seq_hi_and_reserved
- 8 บิตสำหรับฟิลด์ clock_seq_low
- 48 บิตสำหรับฟิลด์ node
นี่คือแผนภาพที่แสดงโครงสร้าง UUID:
UUID Versions
มีหลายเวอร์ชันของ UUID แต่ละเวอร์ชันมีวิธีการสร้างที่แตกต่างกัน:
- เวอร์ชัน 1 (ตามเวลา): ใช้เวลาปัจจุบันและที่อยู่ MAC ของคอมพิวเตอร์
- เวอร์ชัน 2 (DCE Security): คล้ายกับเวอร์ชัน 1 แต่รวมถึงตัวระบุโดเมนท้องถิ่น
- เวอร์ชัน 3 (ตามชื่อ, MD5): สร้างโดยการแฮชตัวระบุเนมสเปซและชื่อ
- เวอร์ชัน 4 (สุ่ม): สร้างโดยใช้หมายเลขสุ่มหรือหมายเลขสุ่มเทียม
- เวอร์ชัน 5 (ตามชื่อ, SHA-1): คล้ายกับเวอร์ชัน 3 แต่ใช้การแฮช SHA-1
เครื่องมือนี้มุ่งเน้นไปที่การสร้าง UUID เวอร์ชัน 1 และเวอร์ชัน 4
Formula
Version 1 UUID Generation
UUID เวอร์ชัน 1 ถูกสร้างขึ้นโดยใช้ส่วนประกอบต่อไปนี้:
- Timestamp: ค่าที่เป็น 60 บิตที่แสดงถึงจำนวนช่วงเวลา 100 นาโนวินาทีตั้งแต่วันที่ 15 ตุลาคม 1582 (วันที่มีการปฏิรูปเกรกอเรียนในปฏิทินคริสต์)
- Clock sequence: ค่าที่เป็น 14 บิตที่ใช้เพื่อหลีกเลี่ยงการซ้ำซ้อนในกรณีที่นาฬิกาถูกตั้งกลับ
- Node: ค่าที่เป็น 48 บิต ซึ่งมักจะได้มาจากที่อยู่ MAC ของคอมพิวเตอร์
สูตรในการสร้าง UUID เวอร์ชัน 1 สามารถแสดงได้ดังนี้:
1UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node
2
Version 4 UUID Generation
UUID เวอร์ชัน 4 ถูกสร้างขึ้นโดยใช้เครื่องกำเนิดหมายเลขสุ่มที่มีความแข็งแกร่งทางการเข้ารหัส สูตรคือ:
1UUID = random_128_bit_number
2
โดยมีบิตเฉพาะที่ถูกตั้งค่าเพื่อระบุเวอร์ชัน (4) และตัวแปร
Use Cases
UUID มีการใช้งานมากมายในหลายโดเมนของวิทยาการคอมพิวเตอร์และวิศวกรรมซอฟต์แวร์:
-
คีย์ฐานข้อมูล: UUID มักถูกใช้เป็นคีย์หลักในฐานข้อมูล โดยเฉพาะในระบบกระจายที่หลายโหนดอาจสร้างบันทึกพร้อมกัน
-
ระบบกระจาย: ในระบบกระจายขนาดใหญ่ UUID ช่วยในการระบุทรัพยากร ธุรกรรม หรือเหตุการณ์อย่างไม่ซ้ำกันในหลายโหนดหรือศูนย์ข้อมูล
-
การระบุเนื้อหา: UUID สามารถใช้ในการสร้างตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาในระบบจัดเก็บข้อมูลที่อิงตามที่อยู่
-
การจัดการเซสชัน: แอปพลิเคชันเว็บมักใช้ UUID เพื่อจัดการเซสชันของผู้ใช้ โดยมั่นใจว่าแต่ละเซสชันมีตัวระบุที่ไม่ซ้ำกัน
-
การระบุอุปกรณ์ IoT: ในแอปพลิเคชัน Internet of Things (IoT) UUID สามารถใช้ในการระบุอุปกรณ์แต่ละตัวในเครือข่ายอย่างไม่ซ้ำกัน
Alternatives
แม้ว่า UUID จะถูกใช้อย่างแพร่หลาย แต่ก็มีแนวทางทางเลือกในการสร้างตัวระบุที่ไม่ซ้ำกัน:
-
ID ที่เพิ่มขึ้นอัตโนมัติ: ง่ายและใช้บ่อยในระบบฐานข้อมูลเดียว แต่ไม่เหมาะสำหรับสภาพแวดล้อมที่กระจาย
-
ID ที่อิงตามเวลา: สามารถมีประโยชน์สำหรับข้อมูลที่เรียงตามเวลา แต่สามารถพบปัญหาการชนกันในสถานการณ์ที่มีการเข้าถึงพร้อมกันสูง
-
Snowflake IDs: พัฒนาโดย Twitter ID เหล่านี้รวมเวลาที่ระบุและหมายเลขของผู้ทำงานเพื่อสร้าง ID ที่ไม่ซ้ำกันในระบบกระจาย
-
ULID (Universally Unique Lexicographically Sortable Identifier): ทางเลือกที่ใหม่กว่าที่มุ่งหวังให้เป็นมิตรกับมนุษย์และเรียงลำดับได้มากกว่า UUID
History
แนวคิดของ UUID ถูกนำเสนอครั้งแรกใน Apollo Network Computing System และต่อมาได้รับการมาตรฐานโดย Open Software Foundation (OSF) เป็นส่วนหนึ่งของ Distributed Computing Environment (DCE) ในปี 1990 สเปคเริ่มต้นถูกเผยแพร่ในปี 1997 ในฐานะ ISO/IEC 11578:1996 และต่อมาได้รับการแก้ไขในปี 2005 เป็นส่วนหนึ่งของ ISO/IEC 9834-8:2005
เหตุการณ์สำคัญในประวัติศาสตร์ของ UUID:
- 1980s: Apollo Computer พัฒนาคอนเซ็ปต์ UUID สำหรับระบบการคอมพิวเตอร์เครือข่ายของพวกเขา
- 1997: สเปค UUID แรกถูกเผยแพร่ในฐานะ ISO/IEC 11578:1996
- 2005: สเปค UUID ได้รับการแก้ไขและเผยแพร่เป็นส่วนหนึ่งของ ISO/IEC 9834-8:2005
- 2009: RFC 4122 กำหนดรูปแบบ UUID และอัลกอริธึมการสร้างที่ใช้ในปัจจุบัน
เมื่อเวลาผ่านไป UUID ได้กลายเป็นเครื่องมือที่สำคัญในระบบกระจายและการออกแบบฐานข้อมูล โดยมีการใช้งานและการปรับใช้ที่หลากหลายในภาษาการเขียนโปรแกรมและแพลตฟอร์มต่างๆ
Code Examples
นี่คือตัวอย่างการสร้าง UUID ในภาษาการเขียนโปรแกรมต่างๆ:
1import uuid
2
3## สร้าง UUID เวอร์ชัน 4 (สุ่ม)
4random_uuid = uuid.uuid4()
5print(f"UUID เวอร์ชัน 4: {random_uuid}")
6
7## สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
8time_based_uuid = uuid.uuid1()
9print(f"UUID เวอร์ชัน 1: {time_based_uuid}")
10
1const { v1: uuidv1, v4: uuidv4 } = require('uuid');
2
3// สร้าง UUID เวอร์ชัน 4 (สุ่ม)
4const randomUuid = uuidv4();
5console.log(`UUID เวอร์ชัน 4: ${randomUuid}`);
6
7// สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
8const timeBasedUuid = uuidv1();
9console.log(`UUID เวอร์ชัน 1: ${timeBasedUuid}`);
10
1import java.util.UUID;
2
3public class UuidGenerator {
4 public static void main(String[] args) {
5 // สร้าง UUID เวอร์ชัน 4 (สุ่ม)
6 UUID randomUuid = UUID.randomUUID();
7 System.out.println("UUID เวอร์ชัน 4: " + randomUuid);
8
9 // สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
10 UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
11 System.out.println("UUID เวอร์ชัน 1: " + timeBasedUuid);
12 }
13}
14
1require 'securerandom'
2
3## สร้าง UUID เวอร์ชัน 4 (สุ่ม)
4random_uuid = SecureRandom.uuid
5puts "UUID เวอร์ชัน 4: #{random_uuid}"
6
7## Ruby ไม่มีวิธีในตัวสำหรับ UUID เวอร์ชัน 1
8## คุณจะต้องใช้ gem เช่น 'uuidtools' สำหรับสิ่งนั้น
9
1<?php
2// สร้าง UUID เวอร์ชัน 4 (สุ่ม)
3$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
4 mt_rand(0, 0xffff), mt_rand(0, 0xffff),
5 mt_rand(0, 0xffff),
6 mt_rand(0, 0x0fff) | 0x4000,
7 mt_rand(0, 0x3fff) | 0x8000,
8 mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
9);
10echo "UUID เวอร์ชัน 4: " . $randomUuid . "\n";
11
12// PHP ไม่มีวิธีในตัวสำหรับ UUID เวอร์ชัน 1
13// คุณจะต้องใช้ไลบรารีเช่น 'ramsey/uuid' สำหรับสิ่งนั้น
14?>
15
References
- Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
- International Organization for Standardization. (2005). Information technology – Open Systems Interconnection – Procedures for the operation of OSI Registration Authorities: Generation and registration of Universally Unique Identifiers (UUIDs) and their use as ASN.1 Object Identifier components. ISO/IEC 9834-8:2005. https://www.iso.org/standard/62795.html
- Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
- Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
- ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
ข้อเสนอแนะแสดงความคิดเห็น
คลิกที่ข้อเสนอแนะแสดงความคิดเห็นเพื่อเริ่มให้ข้อเสนอแนะแก่เครื่องมือนี้
เครื่องมือที่เกี่ยวข้อง
ค้นพบเครื่องมือเพิ่มเติมที่อาจมีประโยชน์สำหรับการทำงานของคุณ