Bộ tạo UUID

Tiếp theo

UUIDs cung cấp các mã định danh duy nhất trên toàn cầu mà không cần phối hợp với bất kỳ cơ quan trung tâm nào. Bộ tạo này sinh ra các giá trị tương thích với RFC 4122: phiên bản v1 (gồm thời điểm ghi nhận và MAC), v4 (ngẫu nhiên) và v7 (có tiền tố thời điểm ghi nhận, có thể sắp xếp được). Bạn có thể chọn một phiên bản cụ thể, yêu cầu tạo 1 hoặc 1000 giá trị, rồi sao chép danh sách đó vào dữ liệu khởi tạo, quá trình tạo khóa API hoặc các bài kiểm thử đơn vị của mình.

Cách tạo UUID

  1. 1

    Chọn một phiên bản

    v4 dành cho trường hợp ngẫu nhiên thông thường; v7 khi thứ tự sắp xếp quan trọng; v1 khi bạn cần thông tin thời điểm (timestamp).

  2. 2

    Lựa chọn số lượng

    Một UUID hoặc một lô gồm tối đa 10.000 UUID trong một lần thực hiện.

  3. 3

    Tạo

    Các giá trị sử dụng crypto API của trình duyệt để đảm bảo tính ngẫu nhiên ở mức mật mã.

  4. 4

    Sao chép hoặc tải xuống

    Lấy dữ liệu dưới dạng danh sách mới dòng, mảng JSON hoặc tệp CSV.

Bạn nên sử dụng phiên bản UUID nào?

Phiên bản Cấu trúc Tối ưu cho
v1 Dấu thời gian + đồng hồ + địa chỉ MAC Mã nhật ký cần thứ tự thời gian
v4 122 bit ngẫu nhiên Mã định danh duy nhất thông dụng, dữ liệu kiểm thử
v7 Dấu thời gian Unix (ms) + giá trị ngẫu nhiên (có thể sắp xếp) Khóa chính trong cơ sở dữ liệu

Vì sao phiên bản v7 đang trở thành mặc định

Phiên bản v4 có tính ngẫu nhiên cao, khiến nó rất không phù hợp làm khóa chính cho cơ sở dữ liệu: các thao tác chèn sẽ phân tán khắp cây B và làm giảm hiệu suất ghi. Phiên bản v7 (được hoàn thiện trong RFC 9562 năm 2024) bổ sung một dấu thời gian 48 bit vào phần đầu của UUID, nhờ đó các hàng mới được lưu ở cuối chỉ mục. Giải pháp này vẫn đảm bảo tính duy nhất và không yêu cầu sự phối hợp giữa các bộ phận, đồng thời cung cấp thứ tự sắp xếp sơ bộ dựa trên thời điểm tạo hàng.

Quy tắc định dạng

UUID là một giá trị 128 bit được biểu diễn dưới dạng 32 chữ số thập lục phân theo mẫu 8-4-4-4-12:

018f5b9c-7d4a-7a1b-8c0e-2e1b3c4d5e6f
         ^^                ^
         nibble phiên bản   bit biến thể
  • Nibble phiên bản là ký tự thứ 13 (sau 018f5b9c-7d4a-): cụ thể là 4 cho v4, 7 cho v7, và tương tự với các phiên bản khác.
  • Các bit biến thể là hai bit đầu tiên của ký tự thứ 17; đối với UUID theo RFC 4122, chúng là 10 (nibble cao 8/9/a/b).

Tỷ lệ va chạm

Đối với phiên bản v4, xác suất tạo ra một giá trị UUID trùng nhau cực kỳ nhỏ: bạn cần tạo ra tới 2,7 quintillion (2,7 × 10¹⁸) giá trị UUID mới có khả năng xảy ra va chạm ở mức 50%. Con số này lớn hơn cả số lần các cơ sở dữ liệu thường gặp trong thực tế. Phiên bản v7 sử dụng cùng phân bố ngẫu nhiên này, do đó xác suất va chạm là tương đương trong cùng một miligiây.

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

Về mặt lịch sử thì đúng, vì chúng đã tích hợp địa chỉ MAC của máy chủ tạo ra dữ liệu. Các bộ tạo dữ liệu hiện đại (bao gồm cả thiết bị này) thay thế bằng một mã định danh nút ngẫu nhiên 48 bit; do đó phiên bản v1 không còn tiết lộ thông tin phần cứng nữa.

Khi được tạo bằng CSPRNG (được công cụ này sử dụng thông qua crypto.getRandomValues), phiên bản v4 có độ bất ngờ cao đến mức có thể dùng làm mã xác thực phiên làm việc. Tuy nhiên, UUID không phải là bí mật theo nghĩa đen – nếu bạn cần một bí mật, hãy gọi nó như vậy.

Đúng vậy, chúng đảm bảo an toàn cho các địa chỉ URL (chỉ sử dụng ký tự hex và dấu gạch nối). Để hiển thị ngắn gọn hơn, bạn có thể sử dụng mã hóa base-32 hoặc base-62 cho dữ liệu gốc 128 bit, hoặc dùng ULID – cấu trúc gồm 26 ký tự và có khả năng sắp xếp tương tự như phiên bản v7.

Không. Quá trình tạo diễn ra ngay trong trình duyệt của bạn và các giá trị không bao giờ được gửi đến máy chủ.

Công cụ liên quan

Công cụ này có phiên bản bằng các ngôn ngữ khác