Tạo UUID
Tạo UUID v4/v7, ULID và Nano ID — từng cái một hoặc hàng loạt
Về công cụ này
Tạo định danh duy nhất toàn cục theo bốn kiểu: UUID v4 (ngẫu nhiên hoàn toàn, lựa chọn mặc định hằng ngày), UUID v7 (sắp theo thời gian, lựa chọn hiện đại cho khóa cơ sở dữ liệu), ULID (sắp theo thời gian, viết gọn bằng Crockford Base32) và Nano ID (ngắn, thân thiện với URL). Tạo một cái hoặc tới cả nghìn cái một lúc — mỗi dòng một cái, sẵn sàng dán vào script tạo dữ liệu mẫu.
Tính ngẫu nhiên đến từ Web Crypto API (crypto.getRandomValues), nguồn an toàn về mặt mật mã, chứ không phải Math.random. Việc tạo diễn ra cục bộ, nghĩa là không ai khác biết các ID đó, chúng không được ghi lại ở đâu và vẫn tạo được khi ngoại tuyến.
Nếu bạn đang chọn định dạng ID cho một hệ thống mới: v7 và ULID sắp xếp theo thời điểm tạo, giúp chỉ mục B-tree dễ chịu và làm các ID trong log xấp xỉ theo trình tự thời gian; còn v4 chẳng tiết lộ gì về thời điểm tạo, mà đôi khi đó lại đúng là điều bạn muốn.
Câu hỏi thường gặp
- UUID v4 và v7 khác nhau thế nào?
- v4 là 122 bit ngẫu nhiên. v7 (RFC 9562) mở đầu bằng dấu thời gian 48 bit tính theo mili giây Unix rồi mới tới các bit ngẫu nhiên, nên ID tạo sau sẽ sắp sau. Với khóa chính trong cơ sở dữ liệu, v7 thường cải thiện tính cục bộ khi chèn và kích thước chỉ mục; còn v4 vẫn ổn ở nơi thứ tự không quan trọng hoặc thời điểm tạo không được lộ.
- Hai UUID được tạo ra có thể trùng nhau không?
- Với 122 bit ngẫu nhiên, xác suất nhỏ tới mức không đáng phải thiết kế đề phòng: bạn sẽ phải tạo hàng tỷ ID mỗi giây suốt nhiều thập kỷ mới chạm tới một khả năng xa vời. Trùng lặp trong thực tế đến từ lỗi lập trình (dùng lại seed, sao chép hàng dữ liệu) chứ không phải từ tính ngẫu nhiên.
- Khi nào nên chọn ULID thay vì UUID v7?
- Cả hai giải quyết cùng một bài toán. ULID gồm 26 ký tự Crockford Base32 không phân biệt hoa thường — ngắn và sạch hơn khi nằm trong URL và log — trong khi v7 giữ nguyên hình dạng UUID 36 ký tự chuẩn mà mọi cơ sở dữ liệu và thư viện đều đã chấp nhận. Hãy chọn cái mà hệ sinh thái của bạn hỗ trợ tự nhiên hơn.
- Dùng các ID này làm khóa bí mật hay token có an toàn không?
- Tính ngẫu nhiên thì an toàn về mặt mật mã, nhưng ID thường được hiển thị, ghi log và lập chỉ mục — tức là được đối xử như dữ liệu công khai. Với token phiên hay khóa API, hãy tạo riêng một chuỗi bí mật ít nhất 128 bit ngẫu nhiên và đối xử với nó như mật khẩu.