Chuyển đến nội dung

Trình tạo CUID hiệu quả cho Định danh Duy nhất trong Hệ thống

Tạo các định danh duy nhất chống xung đột (CUID) cho các hệ thống phân tán, cơ sở dữ liệu và ứng dụng web. Tạo ngay các ID có thể mở rộng và có thể sắp xếp.

Trình tạo CUID

Tạo ID chống xung đột một cách nhanh chóng và dễ dàng.

Nhấp "Tạo CUID Mới" để tạo một id.
Máy tính tải...
📚

Tài liệu hướng dẫn

CUID là gì?

CUID (mã định danh duy nhất có khả năng chống trùng) là một chuỗi ngắn gồm chữ cái và chữ số, dùng để gắn nhãn cho một bản ghi, tệp hoặc sự kiện, để không có hai mục nào dùng chung một tên. Công cụ này tạo CUID2, phiên bản hiện tại của định dạng, bằng thư viện @paralleldrive/cuid2. Mỗi mã định danh có 25 ký tự, chỉ gồm chữ thường và chữ số, và được tạo hoàn toàn trong trình duyệt — không có dữ liệu nào được gửi đến máy chủ.

Cách sử dụng công cụ tạo CUID này

  1. Nhấp Generate New CUID để tạo một mã định danh.
  2. Nhấp Copy to Clipboard để sao chép mã.
  3. Dán mã định danh vào cơ sở dữ liệu, tên tệp hoặc ứng dụng.
  4. Nhấp lại vào nút tạo để có một mã định danh khác. Khả năng xảy ra trùng giữa các giá trị CUID2 riêng biệt là cực kỳ thấp, dù không phải bất khả thi về mặt toán học.
  5. Nhấp Reset để xóa kết quả.

Mã định danh được tạo cũng được lưu trong URL của trang, vì vậy có thể chia sẻ hoặc đánh dấu liên kết đến kết quả.

Cấu trúc và công thức của CUID2

Một CUID2 được tạo theo cấu trúc sau:

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

Hàm băm kết hợp bốn đầu vào nội bộ: thời gian hiện tại, bộ đếm theo từng phiên, dấu vân tay của máy chủ và entropy ngẫu nhiên. Hàm đưa chúng qua SHA3-512, chuyển kết quả sang hệ cơ số 36 (các chữ số 0–9 và các chữ cái a-z), rồi giữ lại 24 ký tự trong số đó. Chữ cái đứng đầu được chọn ngẫu nhiên đưa mã định danh hoàn chỉnh lên 25 ký tự, là độ dài mà công cụ này được thiết lập.

Chỉ ký tự đầu tiên đứng riêng: đó là một chữ cái ngẫu nhiên được đặt ở đầu để mọi mã định danh đều bắt đầu bằng chữ cái thay vì chữ số. Nhiều hệ thống, chẳng hạn như tên bảng và tên cột SQL, yêu cầu mã định danh bắt đầu bằng chữ cái, nên cách này giúp CUID2 có thể được dùng an toàn làm tên ở hầu hết mọi nơi. Mọi ký tự sau chữ cái đầu tiên đều thuộc về một phần thân băm liên tục, không thể đọc trực tiếp — không có các phần riêng biệt.

Vì hàm băm chỉ hoạt động theo một chiều, không thể trích xuất bất kỳ đầu vào nào từ mã định danh hoàn chỉnh. Một CUID2 không thể khôi phục dấu thời gian, bộ đếm hay dấu vân tay. Đây là lựa chọn có chủ ý về quyền riêng tư và bảo mật: chỉ từ mã định danh, không thể biết nó được tạo vào lúc nào hoặc ở đâu.

Ví dụ minh họa

Việc tạo mã định danh bằng công cụ này có thể cho kết quả như sau:

1vcpuhcj51eomj1o31dnlqopu0
2

Ở đây, v là chữ cái đứng đầu được chọn ngẫu nhiên, còn cpuhcj51eomj1o31dnlqopu0 (24 ký tự) là phần thân băm. Hai phần trông khác nhau chỉ vì ký tự đầu tiên luôn là một chữ cái — phần thân băm có thể chứa cả chữ cái và chữ số.

Vì sao các hệ thống sử dụng CUID2

  • Không cần phối hợp. Bất kỳ máy nào cũng có thể tự tạo một mã định danh hợp lệ mà không cần yêu cầu máy chủ trung tâm hoặc cơ sở dữ liệu cung cấp giá trị tiếp theo.
  • Khả năng chống trùng. Sự kết hợp giữa thời gian, bộ đếm, dấu vân tay của máy chủ và entropy ngẫu nhiên khiến khả năng hai máy tạo ra cùng một mã định danh là cực kỳ thấp, ngay cả khi tạo nhiều mã mỗi giây.
  • Thân thiện với URL. Một CUID2 chỉ sử dụng chữ thường và chữ số, nên không bao giờ cần mã hóa khi dùng trong địa chỉ web.
  • Tạo nhanh và riêng tư. Vì công cụ này chạy bộ tạo mã trong trình duyệt, các mã định danh được tạo ngay lập tức và không bao giờ rời khỏi thiết bị.

Các mã định danh CUID2 không được sắp xếp theo thời điểm tạo. Không giống số tự tăng trong cơ sở dữ liệu hoặc định dạng CUID cũ hơn (phiên bản 1), một CUID2 ẩn dấu thời gian bên trong hàm băm thay vì lưu nó ở dạng hiển thị rõ ràng. Các ứng dụng cần sắp xếp bản ghi theo thứ tự tạo nên lưu một cột dấu thời gian riêng bên cạnh mã định danh.

CUID2 so với UUID và mã định danh tự tăng

Tính năngCUID2UUID v4Tự tăng
Độ dài25 ký tự36 ký tự (có dấu gạch nối)Thay đổi (thường là một số ngắn)
Bộ ký tựChữ thường và chữ sốChữ số thập lục phân và dấu gạch nốiChữ số
Cần phối hợp trung tâmKhôngKhôngCó (một chuỗi tuần tự trong cơ sở dữ liệu)
Có thể sắp xếp theo thời điểm tạoKhôngKhôngCó
Thân thiện với URL mà không cần mã hóaCóCóCó

CUID2 và UUID v4 giải quyết cùng một vấn đề: tạo mã định danh mà không cần phối hợp trung tâm. CUID2 ngắn hơn và sử dụng bộ ký tự nhỏ hơn, nên dễ đọc và dán vào URL hơn. UUID cũng an toàn khi dùng trong địa chỉ web vì dấu gạch nối là ký tự không cần mã hóa trong URL, nhưng dài hơn 11 ký tự.

Các ứng dụng phổ biến

  • Khóa chính trong cơ sở dữ liệu phân tán, nơi nhiều máy chủ độc lập chèn các hàng dữ liệu
  • Mã định danh yêu cầu hoặc mã theo dõi, dùng để theo dõi một hành động qua nhiều dịch vụ vi mô
  • Tên tệp tải lên, để hai tệp không bao giờ ghi đè lên nhau
  • Mã định danh phiên hoặc mã thông báo cho các ứng dụng web
  • Mã định danh tin nhắn trong các hàng đợi như Kafka hoặc RabbitMQ

Lược sử

Định dạng CUID ban đầu được Eric Elliott phát hành vào 2012 như một giải pháp thay thế UUID cho các ứng dụng phân tán. CUID2, do cùng dự án Paralleldrive phát hành, đã thiết kế lại định dạng dựa trên hàm băm mật mã và loại bỏ dấu thời gian cùng bộ đếm có thể khôi phục mà phiên bản ban đầu để lộ. Công cụ này chỉ tạo mã định danh CUID2.

Các câu hỏi thường gặp

CUID (v1) khác CUID2 như thế nào? CUID v1 lưu dấu thời gian và bộ đếm có thể nhìn thấy bên trong mã định danh, khiến các mã có thể được sắp xếp nhưng đồng thời làm lộ thời điểm và số lượng mã đã được tạo. CUID2 thay thế các trường hiển thị đó bằng hàm băm một chiều, nên không thể đọc ngược thông tin nào từ mã định danh.

Các CUID từ công cụ này có thể sắp xếp theo thời điểm tạo không? Không. Một CUID2 không có dấu thời gian có thể khôi phục, nên không thể sắp xếp các mã theo thời điểm chúng được tạo chỉ bằng cách xem chuỗi.

Mã định danh được tạo dài bao nhiêu và có thể thay đổi độ dài không? Công cụ này luôn tạo mã định danh dài 25 ký tự. Công cụ không có tùy chọn để yêu cầu độ dài khác.

Hai máy khác nhau có thể tạo cùng một CUID2 vào cùng thời điểm không? Về lý thuyết là có thể, nhưng trên thực tế cực kỳ khó xảy ra. Mỗi mã định danh kết hợp dấu vân tay đặc thù của máy chủ với entropy ngẫu nhiên, nên khả năng các máy độc lập tạo ra cùng một hàm băm là cực kỳ thấp.

Công cụ này có gửi dữ liệu nào đến máy chủ không? Không. Mã định danh được JavaScript chạy trong trình duyệt tạo ra, sử dụng đồng hồ hệ thống cục bộ và tính ngẫu nhiên do trình duyệt cung cấp. Không có dữ liệu nào được truyền đi.

Có thể sử dụng CUID2 làm khóa chính của cơ sở dữ liệu không? Có. Mã định danh CUID2 hoạt động tốt làm khóa chính trong cơ sở dữ liệu phân tán, vì bất kỳ nút nào cũng có thể tạo mã mà không cần kiểm tra với chuỗi tuần tự trung tâm. Chúng không được sắp xếp tự nhiên theo thời điểm chèn, vì vậy ứng dụng cần thứ tự đó nên lưu một cột created_at riêng.