สร้าง UUID v4 อย่างรวดเร็วด้วยการสุ่มความปลอดภัยในเบราว์เซอร์
หน้านี้ช่วยให้คุณสร้างตัวระบุ UUID เวอร์ชัน 4 ได้ทันที โดยใช้การสุ่มจาก crypto.getRandomValues() ในเบราว์เซอร์ของคุณ จำนวนที่สร้างได้อยู่ระหว่าง 1 ถึง 100 ค่า และแต่ละค่ามีขนาด 36 ตัวอักษรในรูปแบบ 8-4-4-4-12 (32 ตัวอักษรฐานสิบหกบวกยัติภังค์ 4 ตำแหน่ง) การทำงานทั้งหมดเกิดขึ้นภายในเครื่องของคุณเท่านั้น ไม่มีการส่งข้อมูลใดไปยังเซิร์ฟเวอร์ ทำให้มั่นใจในความเป็นส่วนตัวและสามารถใช้งานแบบออฟไลน์ได้
ความแตกต่างที่สำคัญของหน้านี้เมื่อเทียบกับเครื่องมืออื่นคือการควบคุมรูปแบบตัวอักษรพิมพ์ใหญ่และยัติภังค์ที่สามารถปรับเปลี่ยนได้ทันที — เมื่อคุณเปลี่ยนตัวเลือกใดก็ตาม ชุดตัวระบุทั้งหมดจะถูกสร้างใหม่ทันที ค่าเริ่มต้นคือตัวพิมพ์เล็กและมียัติภังค์ และคุณสามารถสลับไปเป็นตัวพิมพ์ใหญ่หรือไม่มียัติภังค์ได้ตามต้องการ
ควบคุมรูปแบบตัวพิมพ์และยัติภังค์ได้ทันที
อินเทอร์เฟซให้คุณปรับแต่งสองส่วนหลัก:
- ตัวพิมพ์ใหญ่ (Uppercase): ปิดโดยค่าเริ่มต้น เมื่อเปิดใช้งาน ตัวอักษร a-f ใน UUID จะเปลี่ยนเป็น A-F (เช่น
3B7Aแทน3b7a). การเปลี่ยนแปลงนี้ไม่มีผลต่อความสุ่มแต่อย่างใด - รวมยัติภังค์ (Include hyphens): เปิดโดยค่าเริ่มต้น เมื่อปิดใช้งาน UUID จะกลายเป็น string 32 ตัวอักษรโดยไม่มียัติภังค์ (เช่น
3b7a8c9d0e1f2a3b4c5d6e7f8a9b0c1d). ฟอร์แมตนี้สั้นกว่าแต่ยังคงมีความสุ่มครบ 122 บิต
เมื่อคุณเปลี่ยนค่าตัวนับ (count) หรือตัวเลือกใด ๆ ชุดหมายเลขทั้งหมดจะถูกสร้างใหม่ทันที และข้อความสถานะจะเปลี่ยนเป็น "Generated." คุณสามารถคลิกที่แต่ละ UUID เพื่อคัดลอกไปยังคลิปบอร์ด หรือใช้ปุ่ม "Copy all" เพื่อคัดลอกทั้งหมดในครั้งเดียว
ทำไม UUID v4 ถึงแตกต่างจากตัวระบุแบบเรียงตามเวลา
UUID v4 ใช้บิตสุ่ม 122 บิตจาก 128 บิตทั้งหมด (ส่วนที่เหลืออีก 6 บิตใช้ระบุเวอร์ชันและตัวแปร) ซึ่งไม่มีข้อมูลเวลาฝังอยู่ เมื่อเทียบกับ UUID v7 หรือ ULID ที่ใช้ timestamp ทำให้ UUID v4 เรียงลำดับแบบสุ่ม ไม่มีลำดับทางเวลาใดๆ
ข้อแตกต่างนี้สำคัญมากในฐานข้อมูล: ถ้าคุณใช้ UUID v4 เป็น primary key แถวใหม่จะถูกแทรกในตำแหน่งใดก็ได้ในดัชนี B-tree ทำให้เกิด page splits และการแตกกระจายของดัชนี (index fragmentation) สูง ในขณะที่ UUID v7 หรือ ULID จะใส่แถวใหม่ต่อท้าย ทำให้ประสิทธิภาพการเขียนดีกว่า
แต่นั่นก็เป็นข้อดีเมื่อคุณต้องการความไม่สามารถคาดเดาได้ เช่น สำหรับ security tokens หรือ session IDs การไม่มีรูปแบบเวลาทำให้ผู้โจมตีไม่สามารถเดา ID ถัดไปได้
ความน่าจะเป็นในการชนกันและความสำคัญของ 122 บิตสุ่ม
UUID v4 มีบิตสุ่ม 122 บิต ทำให้พื้นที่คีย์มีขนาด 2^122 (ประมาณ 5.3 × 10^36) ความน่าจะเป็นที่ค่าสุ่มสองค่าจะชนกันนั้นต่ำมาก — โดยประมาณที่ 1 ใน 2^61 สำหรับคู่แรก (ตามปัญหา birthday paradox) สำหรับการสร้าง 1 พันล้าน ID ต่อวันเป็นเวลา 100 ปี ความน่าจะเป็นที่จะพบการชนกันมีเพียงประมาณ 10^-18 ซึ่งน้อยกว่าโอกาสถูกฟ้าผ่าเสียอีก
ตัวเลข 122 บิตสุ่มนี้มาจากข้อกำหนดของ RFC 4122: เวอร์ชัน 4 ต้องใช้บิตสุ่มในตำแหน่งที่ไม่ใช่บิตเวอร์ชัน (บิตที่ 12-15 ของ octet ที่ 6) และบิตตัวแปร (บิตที่ 6-7 ของ octet ที่ 8) ส่วนที่เหลืออีก 122 บิตจึงเป็นบิตสุ่มล้วน
ข้อผิดพลาดที่พบบ่อยและการใช้งานจริง
ข้อผิดพลาดที่พบบ่อย:
- ใช้ UUID v4 เป็น primary key โดยไม่พิจารณา index fragmentation — หากคุณมีตารางขนาดใหญ่ที่มีการแทรกสูง ควรพิจารณา UUID v7 หรือ ULID แทน
- สับสนระหว่าง UUID v4 กับ UUID v1 หรือ v7 — v4 ไม่มี timestamp ดังนั้นจึงไม่สามารถใช้เรียงลำดับตามเวลาได้
- ปิดยัติภังค์เพื่อประหยัดพื้นที่จัดเก็บแต่ลืมว่าฟอร์แมตต่างกัน — ตัวระบบ UUID มาตรฐานกำหนดให้มียัติภังค์ แต่การเก็บเป็น binary 16 ไบต์จะประหยัดกว่า
- เชื่อว่า UUID v4 ปลอดภัยเสมอ — จริง ๆ แล้วขึ้นอยู่กับแหล่งความสุ่ม:
Math.random()ไม่ปลอดภัยพอ แต่crypto.getRandomValues()ปลอดภัย ซึ่งเครื่องมือนี้ใช้แบบหลัง
การทำงานในเบราว์เซอร์และข้อดีสำหรับความเป็นส่วนตัว
ทุกการสร้าง UUID v4 ในหน้านี้เกิดขึ้นในเบราว์เซอร์ของคุณล้วนๆ ไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์ใด นอกจากโค้ด HTML/CSS/JS เริ่มต้นแล้ว ไม่มีการเรียก API เพิ่มเติม ข้อดี:
- ทำงานแบบออฟไลน์ได้ — หลังจากโหลดหน้าแล้ว คุณสามารถตัดอินเทอร์เน็ตแล้วยังสร้าง UUID ได้
- ข้อมูลไม่รั่วไหล — ไม่มีใครบนเซิร์ฟเวอร์รู้ว่า ID ที่คุณสร้างคืออะไร
- ความเร็วสูง — การสร้าง 100 ID ใช้เวลาไม่ถึงมิลลิวินาที
คำถามที่พบบ่อย (FAQ)
1. UUID v4 สามารถชนกันได้หรือไม่?
ในทางทฤษฎีมีความเป็นไปได้ แต่ในทางปฏิบัติความน่าจะเป็นต่ำมากจนแทบเป็นศูนย์ ด้วย 122 บิตสุ่ม คุณจะต้องสร้าง ID หลายล้านล้านล้านล้านล้านค่าจึงจะมีโอกาสชนกัน 50% ดังนั้นปลอดภัยสำหรับการใช้งานทั่วไป
2. การเปลี่ยนตัวพิมพ์ใหญ่หรือยัติภังค์ทำให้ค่าสุ่มเปลี่ยนหรือไม่?
ไม่ เพราะการสุ่มเกิดขึ้นก่อนการแปลงรูปแบบ การเปลี่ยนตัวเลือกเพียงแค่ทำให้การแสดงผลต่างกัน แต่ค่า 122 บิตสุ่มยังคงเดิม (ข้อแตกต่างคือเมื่อคุณเปลี่ยนตัวเลือก ระบบจะสร้าง ID ใหม่ทั้งชุดตามการตั้งค่าใหม่ ซึ่งไม่ใช่การแปลงจากค่าเก่า)
3. ฉันสามารถสร้างเกิน 100 ค่าในครั้งเดียวได้ไหม?
ไม่ หน้านี้จำกัดสูงสุดที่ 100 ค่าต่อครั้ง แต่คุณสามารถกด Generate ซ้ำหลายครั้งเพื่อสร้างชุดเพิ่มเติม
4. UUID v4 ใช้กี่บิต?
128 บิตทั้งหมด แบ่งเป็น 122 บิตสุ่ม, 4 บิตสำหรับเวอร์ชัน (0100), และ 2 บิตสำหรับตัวแปร (10)
5. ทำไม UUID v4 ถึงเหมาะสำหรับ security token?
เพราะไม่มีรูปแบบเวลา ทำให้ผู้โจมตีไม่สามารถคาดเดาค่าถัดไปได้แม้จะทราบค่าก่อนหน้า ประกอบกับพื้นที่คีย์ที่กว้างมาก ทำให้การ brute force เป็นไปไม่ได้ในทางปฏิบัติ
6. การคัดลอก UUID ทั้งหมดทำอย่างไร?
คลิกปุ่ม "Copy all" เพื่อคัดลอกทุก ID ที่แสดงอยู่ (เรียงตามบรรทัด) ไปยังคลิปบอร์ด ข้อความสถานะจะเปลี่ยนเป็น "Copied all!" เพื่อยืนยัน