§

ตัวสร้าง UUID — ตัวสร้าง UUID v4 ฟรีออนไลน์

v4 เป็นค่าเริ่มต้น v7 จะเรียงลำดับตามพจนานุกรมตามเวลาที่สร้างและเป็นตัวเลือกที่ดีที่สุดสำหรับคีย์ฐานข้อมูล
รูปแบบผลลัพธ์
§

ผลลัพธ์

    ระบบ multi-region ไทยใช้ UUID เป็นตัวระบุ — primary key ของ Supabase ที่ FlowAccount ใช้, transaction_id ของ Omise ที่กระจายระหว่าง TrueCloud กับ AWS Singapore และ patient_id ของ สปสช. UUID v7 (RFC 9562) เรียงตามเวลาได้ ลด page-split บน B-tree index เครื่องมือใช้ crypto.randomUUID() ในเบราว์เซอร์

    UUID คืออะไร?

    UUID (Universally Unique Identifier) คือค่าขนาด 128 บิตที่แสดงเป็นสตริง 36 ตัวอักษร เช่น 550e8400-e29b-41d4-a716-446655440000 รูปแบบและความหมายของเวอร์ชันถูกกำหนดไว้ใน RFC 4122 สำหรับ v1 ถึง v5 และใน RFC 9562 สำหรับ v6, v7 และ v8 ที่ใหม่กว่า เครื่องมือนี้สร้าง v4 (สุ่มล้วน), v1 (เวลา + Node ID สุ่ม) และ v7 (คำนำหน้าเป็นเวลา Unix หน่วยมิลลิวินาที + ส่วนต่อท้ายแบบสุ่ม เรียงลำดับตามเวลาที่สร้างได้) — ทั้งหมดในเบราว์เซอร์ของคุณผ่าน Web Crypto API ของแพลตฟอร์ม ไม่มีข้อมูลใดถูกส่งไปยังเซิร์ฟเวอร์

    การสร้าง UUID ทำงานอย่างไร?

    แต่ละเวอร์ชันสร้างสมดุลระหว่างความเป็นที่กำหนดได้ การเรียงลำดับได้ และเอนโทรปีไม่เท่ากัน เครื่องมือจะเลือกอัลกอริทึมที่เหมาะสมตามที่คุณเลือก:

    1. v4 (สุ่ม) เรียก crypto.randomUUID() ของเบราว์เซอร์ซึ่งคืนค่าสุ่มทางคริปโทกราฟิก 122 บิต โดยมีบิตคงที่ 6 บิต (เวอร์ชัน 0100 และวาเรียนต์ 10) ถูกตั้งไว้ในตำแหน่งที่ถูกต้อง โอกาสชนกันแทบเป็นศูนย์ทางสถิติ — คุณต้องสร้าง UUID v4 ราว 2.71 × 10^18 ตัว จึงจะเจอการซ้ำกันหนึ่งครั้งด้วยความน่าจะเป็น 50%
    2. v1 (เวลา + Node) บรรจุเวลาสไตล์เกรกอเรียนขนาด 60 บิต (ติ๊ก 100 นาโนวินาทีตั้งแต่ 15-10-1582) ลงใน time_low / time_mid / time_hi_and_version ตั้งค่านิบเบิลเวอร์ชันเป็น 0001 เลือก clock sequence ขนาด 14 บิตที่มีบิตวาเรียนต์ และใช้ Node ID สุ่ม 48 บิตโดยบังคับให้บิต multicast เป็น 1 (RFC 4122 §4.5 อนุญาตให้ใช้ Node ID แบบสุ่มได้อย่างชัดเจนเมื่อไม่มี MAC จากฮาร์ดแวร์ — บิต multicast ทำหน้าที่ระบุว่าไม่ใช่ MAC)
    3. v7 (เวลาเรียงลำดับได้) ตาม RFC 9562 §5.7 จะวางเวลา Unix หน่วยมิลลิวินาทีขนาด 48 บิตแบบ big-endian ตามด้วยเวอร์ชัน 4 บิต 0111 ตามด้วยบิตสุ่ม 12 บิต แล้ววาเรียนต์ 2 บิต 10 และตามด้วยบิตสุ่มอีก 62 บิต เนื่องจากเวลาอยู่ในบิตที่มีนัยสำคัญสูงที่สุด UUID v7 จึงเรียงตามพจนานุกรมตรงกับลำดับการสร้าง — คุณสมบัติที่ไม่มี UUID เวอร์ชันใดให้ได้โดยไม่ต้องเข้ารหัสเพิ่ม
    4. ความสุ่มทั้งหมดมาจาก crypto.getRandomValues() ซึ่งเป็น RNG ปลอดภัยทางคริปโทกราฟิกของเบราว์เซอร์ ทั้ง v1 และ v7 ต่างมีการป้องกัน monotonic ภายในติ๊กเดียวกัน เพื่อให้สองการเรียกติดกันภายในติ๊กของนาฬิกาเดียวกันยังคงเรียงค่าที่สองอยู่เหนือค่าแรก — สำคัญสำหรับการสร้างจำนวนมากที่เร็วกว่านาฬิกามิลลิวินาที
    5. เมื่อสร้างเสร็จ ไปป์ไลน์การจัดรูปแบบจะทำงาน คุณสามารถลบยัติภังค์ เปลี่ยนเป็นตัวพิมพ์ใหญ่ ห่อค่าด้วยวงเล็บปีกกา ({…} — ตามขนบ GUID ของ Microsoft) หรือแสดง 16 ไบต์ดิบเป็น base64 (เอาต์พุต 22 ตัวอักษร ไม่ใส่ padding) โหมด base64 จะทับตัวเลือกรูปแบบอื่น เพราะ base64 เป็นการแสดงผลในตัวของมันเอง

    ทำไมจึงใช้ตัวสร้าง UUID นี้?

    • ไม่มีอะไรออกไปจากเบราว์เซอร์ของคุณ Web Crypto API ทำงานในเครื่อง หลังจากโหลดเอกสารครั้งแรกแล้วหน้าจะไม่ส่งคำขอเครือข่ายใด ๆ เปิด DevTools แล้วกดสร้าง พาเนล Network ก็จะยังเงียบ
    • เอาต์พุตที่ตรงตาม RFC v4 ทำตาม RFC 4122 §4.4, v1 ทำตาม §4.2 และ §4.5 และ v7 ทำตาม RFC 9562 §5.7 นิบเบิลเวอร์ชันและบิตวาเรียนต์ถูกวางไว้ตรงตำแหน่งที่มาตรฐานระบุ — UUID ทุกตัวผ่านการตรวจสอบด้วย regex มาตรฐานของเวอร์ชันนั้น ๆ
    • v7 ที่เรียงลำดับได้สำหรับคีย์ฐานข้อมูล เมื่อใช้ UUID v7 เป็นคีย์หลักแบบ clustered ใน Postgres, MySQL หรือ SQL Server การ insert จะเป็นแบบ append-only บนดัชนี — ไม่มี page split ไม่มี I/O สุ่ม — และยังคงเป็น unique ทั่วโลก v4 ทำเช่นนี้ไม่ได้เพราะบิตของมันเป็นแบบสุ่ม
    • สร้างจำนวนมากโดยไม่มี rate limit สร้าง 1, 10, 100 หรือ 1,000 UUID ในครั้งเดียวก็ได้ ไม่มีโควตา ไม่ต้องสมัคร — เครื่องมือทำงานในแท็บของคุณ ดังนั้นเพดานจึงอยู่ที่ CPU ของคุณ ไม่ใช่ระดับ API ของผู้ให้บริการ

    การใช้งานทั่วไปของ UUID มีอะไรบ้าง?

    UUID ปรากฏในทุกที่ที่ระบบต้องการตัวระบุที่ไม่ซ้ำกันในระดับทั่วโลกโดยไม่ต้องประสานกับหน่วยงานกลาง:

    • คีย์หลักของฐานข้อมูล เลขจำนวนเต็มที่เพิ่มอัตโนมัติเผยจำนวนแถวและพัง sharding UUID มีเสถียรภาพข้าม shard ปลอดภัยในการ merge ข้ามภูมิภาค และ (เมื่อใช้ v7) ทำให้การ insert ลงใน B-tree อยู่ในโซนร้อนโดยไม่เกิด page split แอปทั่วไปจะสร้าง UUID ที่ฝั่งไคลเอ็นต์ ส่งไปพร้อมกับ INSERT และไม่ต้องวิ่งกลับไปขอคีย์จากเซิร์ฟเวอร์เลย
    • ID สำหรับเชื่อมโยงคำขอ มิดเดิลแวร์ HTTP จะแนบ UUID v4 ให้ทุกคำขอที่เข้ามา บันทึกในทุก span และส่งต่อไปยังบริการปลายทาง (มักเป็นเฮดเดอร์ X-Request-Id) เมื่อลูกค้ารายงานบั๊ก วิศวกรซัพพอร์ตวาง ID นั้นแล้ว trace ของคำขอทั้งหมด — ข้ามบริการและโซนเวลา — ก็จะปรากฏอย่างไม่กำกวม
    • คีย์ idempotency API การชำระเงิน (Stripe, Adyen, Square) ยอมรับเฮดเดอร์ Idempotency-Key เพื่อให้คำขอที่ส่งซ้ำไม่เก็บเงินลูกค้าซ้ำสองครั้ง UUID ที่สร้างจากฝั่งไคลเอ็นต์รับประกันว่า key จะ unique ต่อหนึ่งปฏิบัติการเชิงตรรกะ ซึ่งเป็นข้อกำหนดของ API เหล่านี้พอดี

    ตัวอย่าง UUID มีลักษณะอย่างไร?

    ใน Node.js หรือเบราว์เซอร์สมัยใหม่ บรรทัดเดียว crypto.randomUUID() จะคืนค่า UUID v4 ใหม่ — เช่น 3f50b5a8-2c54-4b9c-9c1f-3e5c7e2b8d12 ใช้เป็น request ID หรือ idempotency key ได้เลย เมื่อ UUID กำลังจะลงคอลัมน์ของฐานข้อมูลที่จะเป็นคีย์หลักแบบ clustered ให้สร้าง v7 แทน: ค่าสองค่า v7 ที่สร้างห่างกัน 1 มิลลิวินาที เช่น 0190a3b0-7d4f-7c9e-8b21-a4d6f0bd9c11 และ 0190a3b0-7d50-7f15-9c4e-72b3e0c1d8a4 จะเรียงตามพจนานุกรมตรงกับลำดับการสร้าง ประเภท uuid ของ Postgres เก็บทั้งสองเวอร์ชันเหมือนกันทุกประการ — ความต่างปรากฏตอนเขียนดัชนี: v7 จะถูก append ที่ปลายขวาของ B-tree ขณะที่ v4 กระจายตัวและบังคับให้เกิด I/O สุ่ม

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