Whiz Tools

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

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 ขีดกลาง) ตัวอย่างเช่น:

550e8400-e29b-41d4-a716-446655440000

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:

A B C D E F A: time_low (32 บิต) B: time_mid (16 บิต) C: time_hi_and_version (16 บิต) D: clock_seq_hi_and_reserved (8 บิต) E: clock_seq_low (8 บิต) F: node (48 บิต)

UUID Versions

มีหลายเวอร์ชันของ UUID แต่ละเวอร์ชันมีวิธีการสร้างที่แตกต่างกัน:

  1. เวอร์ชัน 1 (ตามเวลา): ใช้เวลาปัจจุบันและที่อยู่ MAC ของคอมพิวเตอร์
  2. เวอร์ชัน 2 (DCE Security): คล้ายกับเวอร์ชัน 1 แต่รวมถึงตัวระบุโดเมนท้องถิ่น
  3. เวอร์ชัน 3 (ตามชื่อ, MD5): สร้างโดยการแฮชตัวระบุเนมสเปซและชื่อ
  4. เวอร์ชัน 4 (สุ่ม): สร้างโดยใช้หมายเลขสุ่มหรือหมายเลขสุ่มเทียม
  5. เวอร์ชัน 5 (ตามชื่อ, SHA-1): คล้ายกับเวอร์ชัน 3 แต่ใช้การแฮช SHA-1

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

Formula

Version 1 UUID Generation

UUID เวอร์ชัน 1 ถูกสร้างขึ้นโดยใช้ส่วนประกอบต่อไปนี้:

  1. Timestamp: ค่าที่เป็น 60 บิตที่แสดงถึงจำนวนช่วงเวลา 100 นาโนวินาทีตั้งแต่วันที่ 15 ตุลาคม 1582 (วันที่มีการปฏิรูปเกรกอเรียนในปฏิทินคริสต์)
  2. Clock sequence: ค่าที่เป็น 14 บิตที่ใช้เพื่อหลีกเลี่ยงการซ้ำซ้อนในกรณีที่นาฬิกาถูกตั้งกลับ
  3. Node: ค่าที่เป็น 48 บิต ซึ่งมักจะได้มาจากที่อยู่ MAC ของคอมพิวเตอร์

สูตรในการสร้าง UUID เวอร์ชัน 1 สามารถแสดงได้ดังนี้:

UUID = (timestamp * 2^64) + (clock_sequence * 2^48) + node

Version 4 UUID Generation

UUID เวอร์ชัน 4 ถูกสร้างขึ้นโดยใช้เครื่องกำเนิดหมายเลขสุ่มที่มีความแข็งแกร่งทางการเข้ารหัส สูตรคือ:

UUID = random_128_bit_number

โดยมีบิตเฉพาะที่ถูกตั้งค่าเพื่อระบุเวอร์ชัน (4) และตัวแปร

Use Cases

UUID มีการใช้งานมากมายในหลายโดเมนของวิทยาการคอมพิวเตอร์และวิศวกรรมซอฟต์แวร์:

  1. คีย์ฐานข้อมูล: UUID มักถูกใช้เป็นคีย์หลักในฐานข้อมูล โดยเฉพาะในระบบกระจายที่หลายโหนดอาจสร้างบันทึกพร้อมกัน

  2. ระบบกระจาย: ในระบบกระจายขนาดใหญ่ UUID ช่วยในการระบุทรัพยากร ธุรกรรม หรือเหตุการณ์อย่างไม่ซ้ำกันในหลายโหนดหรือศูนย์ข้อมูล

  3. การระบุเนื้อหา: UUID สามารถใช้ในการสร้างตัวระบุที่ไม่ซ้ำกันสำหรับเนื้อหาในระบบจัดเก็บข้อมูลที่อิงตามที่อยู่

  4. การจัดการเซสชัน: แอปพลิเคชันเว็บมักใช้ UUID เพื่อจัดการเซสชันของผู้ใช้ โดยมั่นใจว่าแต่ละเซสชันมีตัวระบุที่ไม่ซ้ำกัน

  5. การระบุอุปกรณ์ IoT: ในแอปพลิเคชัน Internet of Things (IoT) UUID สามารถใช้ในการระบุอุปกรณ์แต่ละตัวในเครือข่ายอย่างไม่ซ้ำกัน

Alternatives

แม้ว่า UUID จะถูกใช้อย่างแพร่หลาย แต่ก็มีแนวทางทางเลือกในการสร้างตัวระบุที่ไม่ซ้ำกัน:

  1. ID ที่เพิ่มขึ้นอัตโนมัติ: ง่ายและใช้บ่อยในระบบฐานข้อมูลเดียว แต่ไม่เหมาะสำหรับสภาพแวดล้อมที่กระจาย

  2. ID ที่อิงตามเวลา: สามารถมีประโยชน์สำหรับข้อมูลที่เรียงตามเวลา แต่สามารถพบปัญหาการชนกันในสถานการณ์ที่มีการเข้าถึงพร้อมกันสูง

  3. Snowflake IDs: พัฒนาโดย Twitter ID เหล่านี้รวมเวลาที่ระบุและหมายเลขของผู้ทำงานเพื่อสร้าง ID ที่ไม่ซ้ำกันในระบบกระจาย

  4. 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 ในภาษาการเขียนโปรแกรมต่างๆ:

import uuid

## สร้าง UUID เวอร์ชัน 4 (สุ่ม)
random_uuid = uuid.uuid4()
print(f"UUID เวอร์ชัน 4: {random_uuid}")

## สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
time_based_uuid = uuid.uuid1()
print(f"UUID เวอร์ชัน 1: {time_based_uuid}")
const { v1: uuidv1, v4: uuidv4 } = require('uuid');

// สร้าง UUID เวอร์ชัน 4 (สุ่ม)
const randomUuid = uuidv4();
console.log(`UUID เวอร์ชัน 4: ${randomUuid}`);

// สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
const timeBasedUuid = uuidv1();
console.log(`UUID เวอร์ชัน 1: ${timeBasedUuid}`);
import java.util.UUID;

public class UuidGenerator {
    public static void main(String[] args) {
        // สร้าง UUID เวอร์ชัน 4 (สุ่ม)
        UUID randomUuid = UUID.randomUUID();
        System.out.println("UUID เวอร์ชัน 4: " + randomUuid);

        // สร้าง UUID เวอร์ชัน 1 (ตามเวลา)
        UUID timeBasedUuid = UUID.fromString(new com.eaio.uuid.UUID().toString());
        System.out.println("UUID เวอร์ชัน 1: " + timeBasedUuid);
    }
}
require 'securerandom'

## สร้าง UUID เวอร์ชัน 4 (สุ่ม)
random_uuid = SecureRandom.uuid
puts "UUID เวอร์ชัน 4: #{random_uuid}"

## Ruby ไม่มีวิธีในตัวสำหรับ UUID เวอร์ชัน 1
## คุณจะต้องใช้ gem เช่น 'uuidtools' สำหรับสิ่งนั้น
<?php
// สร้าง UUID เวอร์ชัน 4 (สุ่ม)
$randomUuid = sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
    mt_rand(0, 0xffff), mt_rand(0, 0xffff),
    mt_rand(0, 0xffff),
    mt_rand(0, 0x0fff) | 0x4000,
    mt_rand(0, 0x3fff) | 0x8000,
    mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
echo "UUID เวอร์ชัน 4: " . $randomUuid . "\n";

// PHP ไม่มีวิธีในตัวสำหรับ UUID เวอร์ชัน 1
// คุณจะต้องใช้ไลบรารีเช่น 'ramsey/uuid' สำหรับสิ่งนั้น
?>

References

  1. Leach, P., Mealling, M., & Salz, R. (2005). A Universally Unique IDentifier (UUID) URN Namespace. RFC 4122. https://tools.ietf.org/html/rfc4122
  2. 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
  3. Universally unique identifier. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Universally_unique_identifier
  4. Snowflake ID. (2023). In Wikipedia. https://en.wikipedia.org/wiki/Snowflake_ID
  5. ULID Spec. (n.d.). GitHub. https://github.com/ulid/spec
Feedback