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

เครื่องมือสร้าง CUID ที่มีประสิทธิภาพสำหรับตัวระบุเอกลักษณ์ในระบบ

สร้างตัวระบุเอกลักษณ์ที่ทนต่อการชนกัน (CUIDs) สำหรับระบบกระจาย ฐานข้อมูล และแอปพลิเคชันเว็บ สร้าง ID ที่ขยายได้และเรียงลำดับได้ทันที

ตัวสร้าง CUID

สร้าง ID ที่ป้องกันการชนกันได้อย่างรวดเร็วและง่ายดาย

คลิก "สร้าง CUID ใหม่" เพื่อสร้างไอดี
เครื่องคำนวณโหลด...
📚

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

CUID คืออะไร?

CUID (ตัวระบุเฉพาะที่ทนต่อการชนกัน) คือสตริงสั้น ๆ ที่ประกอบด้วยตัวอักษรและตัวเลข ใช้ระบุระเบียน ไฟล์ หรือเหตุการณ์ เพื่อไม่ให้รายการสองรายการมีชื่อเดียวกัน เครื่องมือนี้สร้าง CUID2 ซึ่งเป็นรูปแบบเวอร์ชันปัจจุบัน โดยใช้ไลบรารี @paralleldrive/cuid2 แต่ละรหัสมีความยาว 25 อักขระ ประกอบด้วยตัวอักษรพิมพ์เล็กและตัวเลขเท่านั้น และสร้างขึ้นทั้งหมดในเบราว์เซอร์ โดยไม่มีการส่งข้อมูลไปยังเซิร์ฟเวอร์

วิธีใช้เครื่องมือสร้าง CUID นี้

  1. คลิก สร้าง CUID ใหม่ เพื่อสร้างรหัส
  2. คลิก คัดลอกไปยังคลิปบอร์ด เพื่อคัดลอกรหัส
  3. วางรหัสลงในฐานข้อมูล ชื่อไฟล์ หรือแอปพลิเคชัน
  4. คลิกสร้างอีกครั้งเพื่อสร้างรหัสอื่น โอกาสที่ค่า CUID2 สองค่าจะแตกต่างกันแต่ชนกันนั้นต่ำมาก แม้จะไม่ใช่สิ่งที่เป็นไปไม่ได้ในทางคณิตศาสตร์
  5. คลิก รีเซ็ต เพื่อล้างผลลัพธ์

รหัสที่สร้างขึ้นจะถูกเก็บไว้ใน URL ของหน้าเว็บด้วย จึงสามารถแชร์หรือบันทึกลิงก์ไปยังผลลัพธ์ได้

โครงสร้างและสูตรของ CUID2

CUID2 ถูกสร้างขึ้นดังนี้:

1id = randomLetter + base36( SHA3-512( time + entropy + counter + fingerprint ) ).substring(1, length)
2

ฟังก์ชันแฮชจะผสมข้อมูลนำเข้าส่วนตัวสี่รายการ ได้แก่ เวลาปัจจุบัน ตัวนับประจำเซสชัน ลายนิ้วมือของเครื่องโฮสต์ และเอนโทรปีแบบสุ่ม จากนั้นประมวลผลผ่าน SHA3-512 แปลงผลลัพธ์เป็นเลขฐาน 36 (ตัวเลข 0–9 และตัวอักษร a-z) แล้วเก็บไว้ 24 อักขระ ตัวอักษรนำหน้าแบบสุ่มทำให้รหัสที่เสร็จสมบูรณ์มีความยาว 25 อักขระ ซึ่งเป็นความยาวที่เครื่องมือนี้กำหนดไว้

มีเพียง อักขระตัวแรก เท่านั้นที่แยกเป็นส่วนเดี่ยว โดยเป็นตัวอักษรสุ่มที่วางไว้ด้านหน้า เพื่อให้รหัสทุกตัวเริ่มต้นด้วยตัวอักษรแทนที่จะเป็นตัวเลข ระบบจำนวนมาก เช่น ชื่อตารางและคอลัมน์ SQL กำหนดให้ตัวระบุต้องขึ้นต้นด้วยตัวอักษร จึงทำให้ CUID2 ปลอดภัยสำหรับใช้เป็นชื่อได้เกือบทุกที่ อักขระทุกตัวหลังตัวแรกเป็นส่วนหนึ่งของเนื้อหาแฮชทึบแสงที่ต่อเนื่องกันทั้งหมด ไม่มีการแบ่งส่วนย่อย

เนื่องจากแฮชทำงานทางเดียว จึงไม่สามารถดึงข้อมูลนำเข้าใด ๆ กลับออกจากรหัสที่เสร็จสมบูรณ์ได้ CUID2 ไม่มีเวลาที่กู้คืนได้ ไม่มีตัวนับที่กู้คืนได้ และไม่มีลายนิ้วมือที่กู้คืนได้ นี่เป็นการตัดสินใจโดยเจตนาเพื่อความเป็นส่วนตัวและความปลอดภัย กล่าวคือ รหัสเพียงอย่างเดียวไม่สามารถเปิดเผยได้ว่าสร้างขึ้นเมื่อใดหรือที่ใด

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

การสร้างรหัสด้วยเครื่องมือนี้อาจได้ผลลัพธ์ดังนี้:

1vcpuhcj51eomj1o31dnlqopu0
2

ในที่นี้ v คือตัวอักษรนำหน้าแบบสุ่ม และ cpuhcj51eomj1o31dnlqopu0 (มี 24 อักขระ) คือเนื้อหาแฮช ทั้งสองส่วนดูแตกต่างกันเพียงเพราะมีการรับประกันว่าอักขระตัวแรกต้องเป็นตัวอักษร ส่วนเนื้อหาแฮชสามารถมีทั้งตัวอักษรและตัวเลขผสมกัน

เหตุผลที่ระบบต่าง ๆ ใช้ CUID2

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

รหัส CUID2 ไม่สามารถเรียงตามเวลาที่สร้างได้ ต่างจากตัวเลขเพิ่มอัตโนมัติของฐานข้อมูลหรือรูปแบบ CUID รุ่นเก่า (เวอร์ชัน 1) CUID2 ซ่อนเวลาประทับไว้ภายในแฮชแทนที่จะจัดเก็บให้เห็นโดยตรง แอปพลิเคชันที่ต้องเรียงระเบียนตามลำดับการสร้างควรจัดเก็บคอลัมน์เวลาประทับแยกต่างหากควบคู่กับรหัส

CUID2 เทียบกับ UUID และรหัสเพิ่มอัตโนมัติ

คุณลักษณะCUID2UUID v4เพิ่มค่าอัตโนมัติ
ความยาว25 อักขระ36 อักขระ (มีขีดกลาง)แตกต่างกัน (โดยทั่วไปเป็นตัวเลขสั้น ๆ)
ชุดอักขระตัวอักษรพิมพ์เล็กและตัวเลขเลขฐานสิบหกและขีดกลางตัวเลข
ต้องมีการประสานงานจากส่วนกลางไม่ไม่ใช่ (ลำดับของฐานข้อมูล)
เรียงตามเวลาที่สร้างได้ไม่ไม่ใช่
เหมาะสำหรับ URL โดยไม่ต้องเข้ารหัสใช่ใช่ใช่

CUID2 และ UUID v4 แก้ปัญหาเดียวกัน นั่นคือการสร้างรหัสโดยไม่ต้องประสานงานจากส่วนกลาง CUID2 สั้นกว่าและใช้ชุดอักขระที่เล็กกว่า จึงอ่านและวางลงใน URL ได้ง่ายกว่า UUID ก็ปลอดภัยสำหรับใช้ในที่อยู่เว็บเช่นกัน เพราะขีดกลางเป็นอักขระที่ไม่จำเป็นต้องเข้ารหัสใน URL แต่มีความยาวมากกว่า 11 อักขระ

การใช้งานทั่วไป

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

ประวัติโดยย่อ

รูปแบบ CUID ดั้งเดิมเผยแพร่โดย Eric Elliott ในปี 2012 เพื่อเป็นทางเลือกแทน UUID สำหรับแอปพลิเคชันแบบกระจาย CUID2 ซึ่งเผยแพร่โดยโครงการ Paralleldrive เดียวกัน ได้ออกแบบรูปแบบใหม่โดยใช้แฮชเข้ารหัส และนำเวลาประทับกับตัวนับที่กู้คืนได้ซึ่งรุ่นดั้งเดิมเปิดเผยไว้ออกไป เครื่องมือนี้สร้างเฉพาะรหัส CUID2 เท่านั้น

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

CUID (v1) แตกต่างจาก CUID2 อย่างไร CUID v1 จัดเก็บเวลาประทับและตัวนับที่มองเห็นได้ไว้ภายในรหัส ทำให้เรียงตามลำดับได้ แต่ก็เปิดเผยว่ารหัสถูกสร้างขึ้นเมื่อใดและสร้างไปแล้วกี่รายการ CUID2 แทนที่ข้อมูลที่มองเห็นได้เหล่านั้นด้วยแฮชทางเดียว จึงไม่สามารถอ่านข้อมูลใด ๆ ย้อนกลับจากรหัสได้

CUID จากเครื่องมือนี้เรียงตามเวลาที่สร้างได้หรือไม่ ไม่ได้ CUID2 ไม่มีเวลาประทับที่กู้คืนได้ จึงไม่สามารถจัดลำดับรหัสตามเวลาที่สร้างได้เพียงดูจากสตริง

รหัสที่สร้างขึ้นมีความยาวเท่าใด และเปลี่ยนความยาวได้หรือไม่ เครื่องมือนี้สร้างรหัสที่มีความยาว 25 อักขระเสมอ ไม่มีตัวเลือกในเครื่องมือนี้สำหรับขอความยาวอื่น

เครื่องสองเครื่องที่แตกต่างกันสามารถสร้าง CUID2 เดียวกันในเวลาเดียวกันได้หรือไม่ ในทางทฤษฎีเป็นไปได้ แต่ในทางปฏิบัติมีโอกาสเกิดขึ้นน้อยมาก รหัสแต่ละรายการผสมลายนิ้วมือเฉพาะของโฮสต์เข้ากับเอนโทรปีแบบสุ่ม ดังนั้นจึงมีโอกาสน้อยมากที่เครื่องอิสระสองเครื่องจะสร้างแฮชเดียวกัน

เครื่องมือนี้ส่งข้อมูลใด ๆ ไปยังเซิร์ฟเวอร์หรือไม่ ไม่ รหัสถูกสร้างโดย JavaScript ที่ทำงานในเบราว์เซอร์ โดยใช้นาฬิกาของระบบภายในเครื่องและค่าความสุ่มที่เบราว์เซอร์จัดหาให้ ไม่มีการส่งข้อมูลใด ๆ

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