Trình tạo ULID là gì?
Trình tạo ULID là công cụ tạo mã định danh bằng cách kết hợp thời gian hiện tại với dữ liệu ngẫu nhiên. ULID viết đầy đủ là Universally Unique Lexicographically Sortable Identifier, một dạng định danh được thiết kế để có không gian giá trị lớn và hỗ trợ sắp xếp theo thời gian thông qua cách so sánh chuỗi. Đây là kiến thức nền về ULID; khả năng cụ thể của công cụ cần được phân biệt với những đặc điểm chung của định dạng.
Trong phần triển khai được cung cấp, mỗi mã đầu ra là một chuỗi 26 ký tự gồm chữ số và chữ cái viết hoa, không có dấu gạch nối. Công cụ tạo được một danh sách nhiều mã, trình bày mỗi mã trên một dòng và cho phép sao chép toàn bộ danh sách. Nhu cầu mà nó giải quyết là lấy nhanh các định danh để gán cho bản ghi, tài nguyên hoặc dữ liệu mẫu, thay vì tự nghĩ ra từng mã.
ULID không phải phép mã hóa nội dung, chữ ký số hay mật khẩu. Công cụ không nhận một thông điệp để biến thành dữ liệu bí mật và cũng không xác minh danh tính người tạo mã. Thành phần ngẫu nhiên phục vụ việc giảm khả năng trùng định danh, không tự biến mã thành thông tin xác thực.
Từ “duy nhất” trong tên ULID thể hiện mục tiêu thiết kế, không phải cam kết tuyệt đối cho từng kết quả. Công cụ không kiểm tra mã vừa tạo với danh sách trước đó hoặc với dữ liệu trong hệ thống của bạn. Vì vậy, yêu cầu không trùng trong ứng dụng quan trọng vẫn cần được bảo vệ tại nơi lưu trữ.

Đầu vào và kết quả của trình tạo ULID
Số lượng cần tạo và phạm vi lựa chọn
Đầu vào do người dùng lựa chọn là số lượng mã mỗi lượt. Giá trị mặc định là 5; khi giao diện được khởi tạo, logic tạo danh sách tự thực hiện với giá trị này. Thanh trượt cho phép chọn từ 1 đến 100, còn ô nhập số cho phép yêu cầu số lượng lớn hơn, với mức tối đa được xử lý là 1000 mã mỗi lượt.
Hai cách nhập có phạm vi khác nhau nhưng cùng điều khiển việc tạo danh sách. Khi ô nhập chứa một số lớn hơn 100, thanh trượt được đặt ở mức 100; điều đó không có nghĩa số lượng tạo bị giảm xuống 100. Số lượng hiệu lực vẫn được tính từ ô nhập, sau khi áp dụng quy tắc xử lý số nguyên và giới hạn.
Người dùng không cung cấp nội dung để mã hóa. Hai dữ liệu còn lại được lấy tự động: thời gian hiện tại từ đồng hồ thiết bị và dữ liệu ngẫu nhiên từ API mật mã của trình duyệt. Giao diện được cung cấp không có trường nhập thời gian, seed, tiền tố hoặc hậu tố riêng.
Cách đọc danh sách kết quả
Kết quả là văn bản gồm một mã trên mỗi dòng, mỗi mã dài 26 ký tự. Số dòng phản ánh số lượng thực sự được dùng khi tạo, không nhất thiết trùng với con số còn hiển thị trong ô nhập. Điều này đáng lưu ý khi nhập giá trị ngoài phạm vi hoặc một giá trị phải được chuyển thành số nguyên.
Thay đổi số lượng hoặc yêu cầu tạo lại đều tạo một danh sách mới và thay thế toàn bộ danh sách trước, không nối thêm vào cuối. Nếu cần giữ kết quả cũ, bạn nên lưu phần văn bản đó trước khi thay đổi lựa chọn.
Thao tác sao chép lấy toàn bộ nội dung đang hiển thị, bao gồm dấu xuống dòng giữa các mã. Vùng kết quả là vùng chỉ đọc; công cụ không cung cấp chỉnh sửa từng mã trong vùng này. Không có chức năng xuất tệp, JSON hay CSV trong giao diện được cung cấp.

ULID được tạo từ thời gian và dữ liệu ngẫu nhiên như thế nào?
Cấu trúc 10 ký tự thời gian và 16 ký tự ngẫu nhiên
Công thức cấu trúc của kết quả là ULID = 10 ký tự thời gian + 16 ký tự ngẫu nhiên. Với mỗi mã, thời gian được lấy theo đơn vị mili giây kể từ mốc Unix. Giá trị đó được chuyển sang cơ số 32 bằng cách liên tiếp lấy số dư khi chia cho 32, rồi tiếp tục với phần nguyên của thương. Các ký tự được đặt từ phải sang trái để tạo phần đầu có độ dài cố định 10 ký tự, với số 0 ở phía trước khi cần.
Phần sau sử dụng 16 byte lấy qua API mật mã của trình duyệt. Mỗi byte được lấy số dư khi chia cho 32 để chọn một ký tự trong bảng chữ cái. Vì một byte có 256 giá trị và 256 chia hết cho 32, cách ánh xạ này không tự gây thiên lệch giữa các ký tự nếu các byte đầu vào phân bố đều. Đây là mô tả cơ chế, không phải kết quả kiểm thử chất lượng ngẫu nhiên.
Mười sáu ký tự Base32 có 3216 = 280 tổ hợp, xấp xỉ 1,21 × 1024. Con số đó là kích thước không gian phần ngẫu nhiên, không phải tốc độ tạo mã mỗi mili giây hoặc số mã được bảo đảm không trùng.
Vì sao có thể sắp xếp theo thời gian?
Phần thời gian nằm trước và có độ dài cố định, nên với quy tắc so sánh ký tự phù hợp, tiền tố ứng với thời gian nhỏ hơn đứng trước tiền tố ứng với thời gian lớn hơn. Tuy nhiên, khi hai mã cùng mili giây, phần ngẫu nhiên quyết định thứ tự giữa chúng. Công cụ không điều chỉnh phần này để bảo đảm tăng theo thứ tự tạo.
Danh sách được hiển thị theo thứ tự sinh mã, không trải qua bước sắp xếp. Thời gian cũng được đọc riêng cho từng mã, nên một lượt tạo có thể chứa nhiều dấu thời gian khác nhau.
Quy tắc chuẩn hóa số lượng
Logic lấy phần số nguyên của đầu vào; chẳng hạn 3.9 được xử lý thành 3, không làm tròn thành 4. Nếu kết quả là 0 hoặc không phân tích được thành số, công cụ dùng 5. Sau đó, số lượng dưới 1 được giới hạn thành 1 và số lượng trên 1000 được giới hạn thành 1000.
Việc hiệu chỉnh số lượng không đồng thời ghi lại giá trị đã hiệu chỉnh vào ô nhập. Do đó, hãy phân biệt số đang nhìn thấy trong ô với số lượng hiệu lực dùng để tạo danh sách.

Các thuật ngữ cần hiểu khi sử dụng ULID
Dấu thời gian Unix
Dấu thời gian Unix là số đo thời gian tính từ mốc 00:00:00 UTC ngày 1 tháng 1 năm 1970. Công cụ sử dụng đơn vị mili giây và đưa giá trị này vào phần đầu của mã. Nó giúp liên hệ định danh với lúc mã được tạo, nhưng không chứng minh lúc một sự kiện nghiệp vụ xảy ra. Chẳng hạn, mã tạo khi nhập lại một đơn hàng cũ phản ánh lúc tạo mã, không phải ngày khách đặt hàng.
Crockford Base32
Crockford Base32 là cách biểu diễn dữ liệu bằng bảng 32 ký tự. Bảng dùng trong công cụ gồm chữ số và chữ cái viết hoa, bỏ I, L, O, U để hạn chế một số nhầm lẫn khi đọc. Cách biểu diễn này quyết định hình thức cả phần thời gian lẫn phần ngẫu nhiên. Đừng nhầm “mã hóa Base32” với mã hóa bảo mật: đổi dữ liệu sang một bảng ký tự khác không làm dữ liệu trở thành bí mật hay chống đọc được.
Thứ tự từ điển
Thứ tự từ điển là cách so sánh chuỗi từ trái sang phải, dựa trên thứ tự của các ký tự. Với ULID, phần đầu biểu diễn thời gian giúp việc so sánh này phản ánh thứ tự thời gian khi hệ thống dùng quy tắc phù hợp. Điểm dễ nhầm là coi đó như thứ tự tạo tuyệt đối. Hai mã có cùng phần thời gian vẫn được so sánh bằng phần sau, và quy tắc đối chiếu của nơi lưu trữ cần được xem xét.
Monotonic ULID
Monotonic ULID là cách sinh có điều chỉnh phần sau để duy trì thứ tự tăng khi nhiều mã được tạo trong cùng dấu thời gian. Đây là kiến thức nền để phân biệt các cách tạo ULID, không phải một chế độ có trên công cụ này. Phần triển khai được cung cấp lấy dữ liệu ngẫu nhiên mới cho từng mã và không giữ cơ chế tăng phần sau. Vì vậy, thứ tự sinh trong một mili giây có thể khác thứ tự sau khi sắp xếp.
Va chạm định danh
Va chạm định danh xảy ra khi hai lần tạo cho ra cùng một giá trị mã. Không gian ngẫu nhiên lớn giúp giảm xác suất này, nhưng không thể thay thế một kiểm tra tính duy nhất trong ứng dụng cần bảo đảm không trùng. Công cụ không dò hoặc loại bỏ mã trùng trong danh sách. Với dữ liệu quan trọng, ràng buộc duy nhất tại nơi lưu trữ và cách xử lý khi bị từ chối là lớp bảo vệ riêng cần có.

Có thể sử dụng danh sách ULID vào những việc nào?
Định danh bản ghi và sự kiện
Danh sách ULID có thể được dùng làm nguồn mã tham khảo để gán cho bản ghi, sự kiện hoặc tài nguyên trong hệ thống chấp nhận định dạng này. Chuỗi có độ dài cố định giúp thống nhất trường văn bản; việc không có dấu gạch nối thuận tiện trong những ngữ cảnh yêu cầu mã liền nhau. Bảng ký tự cũng không chứa khoảng trắng hay dấu phân cách đặc biệt, nhưng nơi tiếp nhận vẫn phải chấp nhận quy tắc đặt tên tương ứng.
Với dữ liệu cần được sắp xếp gần với thời gian tạo mã, tiền tố thời gian có thể hữu ích. Điều kiện là đồng hồ thiết bị phù hợp và cách so sánh chuỗi của hệ thống giữ đúng thứ tự ký tự. Không nên dùng đặc điểm đó để suy ra thời gian nghiệp vụ chính xác hoặc thứ tự xử lý giữa các thiết bị.
Trong cơ sở dữ liệu, bạn vẫn cần quyết định kiểu lưu trữ, quy tắc đối chiếu và ràng buộc duy nhất. Công cụ chỉ tạo văn bản; nó không tạo bảng, nhập bản ghi hay tích hợp sẵn với hệ quản trị dữ liệu của bạn.
Tạo dữ liệu mẫu cho thử nghiệm
Một danh sách mã có thể phục vụ việc điền dữ liệu mẫu vào bảng tính, biểu mẫu thử nghiệm hoặc tập bản ghi giả lập. Mỗi dòng riêng biệt thuận tiện cho việc chuyển các mã sang môi trường khác có hỗ trợ nhận văn bản theo dòng. Khi tạo lại, danh sách cũ bị thay thế, nên cần giữ bản đã dùng nếu muốn duy trì liên kết giữa các dữ liệu mẫu.
Không nên gán cho các mã vai trò bí mật truy cập. ULID có thành phần thời gian có thể tiết lộ thông tin về lúc tạo; mục đích định danh và mục đích xác thực là hai yêu cầu khác nhau.

Ví dụ đọc kết quả và xử lý số lượng ULID
Tạo ít mã và tạo hơn 100 mã
Giả sử bạn nhập số lượng 3 và trình duyệt cung cấp được thời gian cùng dữ liệu ngẫu nhiên. Logic sẽ tạo 3 dòng kết quả, mỗi dòng chứa một mã 26 ký tự. Không thể xác định trước nội dung cụ thể của ba mã, vì cả thời gian và phần ngẫu nhiên đều được lấy tại lúc tạo.
Nếu nhập 150, số lượng nằm trong giới hạn tạo nhưng vượt phạm vi thanh trượt. Kết quả là 150 mã, còn thanh trượt hiển thị ở mức 100. Đây là sự khác nhau về phạm vi điều khiển, không phải dấu hiệu 50 mã bị bỏ qua. Các kết quả trong ví dụ là suy luận từ logic được cung cấp, không phải báo cáo chạy thử.
Những giá trị số lượng dễ gây hiểu nhầm
Bảng sau xét giá trị được chuyển tới logic tạo danh sách. Với đầu vào thập phân, giả định ô nhập chuyển được giá trị đó đến phần xử lý; cách trình duyệt cho phép nhập có thể phụ thuộc môi trường.
| Giá trị đầu vào | Số mã hiệu lực | Cách xử lý |
|---|---|---|
| 0 | 5 | Kích hoạt giá trị dự phòng. |
| -2 | 1 | Được giới hạn ở mức tối thiểu. |
| 1001 | 1000 | Được giới hạn ở mức tối đa. |
| 3.9 | 3 | Lấy phần nguyên, không làm tròn. |
Để minh họa cấu trúc mã, giả định riêng thời gian bằng 32 mili giây kể từ mốc Unix và 16 byte ngẫu nhiên đều bằng 0. Số 32 trong cơ số 32 được viết là 10; bổ sung đủ độ dài cho tiền tố 0000000010. Phần sau là 16 ký tự 0. Đây là giả định toán học, không phải thời gian hay dữ liệu ngẫu nhiên mà người dùng có thể chọn trên giao diện.
Hai mã cùng mili giây có thể đổi thứ tự khi sắp xếp
Giả sử hai mã có cùng dấu thời gian. Mã được tạo trước nhận 16 byte đều bằng 255; mã tạo sau nhận 16 byte đều bằng 0. Do 255 chia 32 dư 31, phần sau của mã đầu gồm toàn chữ Z, còn mã sau gồm toàn chữ số 0.
Khi so sánh theo thứ tự ký tự thông thường, mã có phần sau toàn 0 đứng trước mã có phần sau toàn Z. Như vậy, mã tạo sau có thể đứng trước khi sắp xếp. Ví dụ này minh họa giới hạn thứ tự, không nói rằng những chuỗi giả định đó đã xuất hiện trong một lần sử dụng thực tế.

ULID khác gì UUID và mã số tăng dần?
ULID và UUID v4
Về kiến thức nền, ULID chuẩn có cấu trúc 128 bit, gồm 48 bit thời gian và 80 bit ngẫu nhiên, thường biểu diễn bằng 26 ký tự Base32. UUID cũng là định danh 128 bit, nhưng dạng văn bản phổ biến dùng các chữ số thập lục phân và dấu gạch nối. Cùng độ rộng dữ liệu không có nghĩa hai dạng văn bản có thể thay thế trực tiếp trong mọi trường hoặc thư viện.
UUID v4 là đối chiếu cụ thể hữu ích vì không có tiền tố thời gian phục vụ việc sắp xếp như ULID. Tuy nhiên, không nên mở rộng nhận xét đó thành “mọi UUID đều không chứa thời gian”; các phiên bản UUID khác có cấu trúc khác nhau.
Phần triển khai này cho thấy cách ghép thời gian với dữ liệu ngẫu nhiên, nhưng chưa có kiểm thử tương thích với các thư viện ở ngôn ngữ khác. Mã cũng không kiểm tra miền thời gian 48 bit, nên không thể coi mô tả cấu trúc là xác nhận tuân thủ đầy đủ ở mọi giá trị thời gian biên.
ULID và mã số tăng dần
Mã số tăng dần thường cần một cơ chế phối hợp cấp số để tránh nhiều nơi nhận cùng số. ULID kết hợp thời gian với không gian ngẫu nhiên, nên việc tạo không dựa vào một bộ đếm chung trong công cụ này. Đổi lại, nó không cung cấp bảo đảm không trùng như một cơ chế cấp số được kiểm soát.
Số tăng dần dễ bộc lộ thứ tự cấp; ULID cũng không che giấu hoàn toàn thời gian vì có tiền tố thời gian. Nếu cần thứ tự tăng ngay trong cùng mili giây, cách sinh monotonic là một lựa chọn về thiết kế riêng. Công cụ không có tùy chọn chuyển giữa sinh ngẫu nhiên thông thường và monotonic.

Giới hạn và lưu ý trước khi dùng ULID trong hệ thống
Tính duy nhất và độ tin cậy của đồng hồ
Công cụ không kiểm tra trùng lặp trong một lượt hoặc đối chiếu với kho mã đã tồn tại. Nếu việc trùng mã gây mất hoặc ghi đè dữ liệu, hãy bảo vệ tính duy nhất tại nơi lưu trữ thay vì chỉ dựa vào xác suất. Công cụ cũng không bảo đảm thứ tự tăng giữa các mã cùng mili giây.
Thời gian phụ thuộc đồng hồ thiết bị. Đồng hồ sai, bị điều chỉnh hoặc chạy lùi có thể làm thứ tự tiền tố không phản ánh đúng diễn tiến thực tế. Vì vậy, thứ tự ULID không thay thế nhật ký thời gian đáng tin cậy, đặc biệt khi tổng hợp dữ liệu từ nhiều thiết bị.
Khả năng trình duyệt và phạm vi chưa xác minh
Việc tạo mã phụ thuộc API mật mã của trình duyệt; phần tạo không có nhánh dự phòng hay xử lý lỗi riêng nếu API này không khả dụng. Sao chép phụ thuộc một API khác là Clipboard, nên lỗi sao chép không nhất thiết có nghĩa việc tạo mã đã thất bại.
Giao diện được cung cấp không có lựa chọn chữ thường, thời gian tùy chỉnh, giải mã, kiểm tra mã đầu vào hoặc xuất tệp. Mức 1000 mã là giới hạn được triển khai cho mỗi lượt, không phải kết luận đo đạc hiệu năng. Việc sử dụng API ngẫu nhiên mật mã cũng không phải chứng nhận bảo mật cho toàn công cụ.
Chưa có đủ thông tin để xác nhận hoạt động trên mọi trình duyệt, chính sách quyền tại trang đang triển khai hoặc tính tương thích với các thư viện khác. Tương tự, không thể cam kết toàn trang không lưu dữ liệu hay không có hoạt động mạng chỉ từ những đoạn mã được cung cấp; các thành phần khác của trang chưa được xác minh.

Câu hỏi thường gặp
Vì sao thanh trượt chỉ đến 100 nhưng tôi vẫn tạo được 150 ULID?
Vì thanh trượt và ô nhập số có phạm vi khác nhau. Thanh trượt chỉ hỗ trợ lựa chọn đến 100, trong khi số lượng từ ô nhập được xử lý đến tối đa 1000 mã. Khi nhập 150, thanh trượt nằm ở điểm cuối nhưng số lượng hiệu lực vẫn là 150. Bạn nên đọc nó như trạng thái của một điều khiển có phạm vi hẹp hơn, không phải chỉ báo chính xác cho mọi số lượng có thể nhập. Giới hạn này áp dụng cho từng lượt tạo, không phải tổng số mã qua nhiều lượt.
Tại sao nhập số lượng 0 lại nhận được 5 mã?
Vì logic dùng 5 làm giá trị dự phòng khi kết quả phân tích đầu vào bằng 0 hoặc không phải số có thể sử dụng. Quy tắc dự phòng được áp dụng trước bước giới hạn số lượng tối thiểu, nên 0 không được chuyển thành 1. Đây là hành vi xử lý đầu vào, không phải việc tạo danh sách rỗng rồi tự thêm mã. Ô nhập có thể vẫn hiện 0 vì phần tạo không ghi lại giá trị hiệu chỉnh; số dòng kết quả mới phản ánh số lượng đã dùng.
Công cụ có tạo ULID chữ thường không?
Không, phần triển khai được cung cấp chỉ sinh mã bằng bảng ký tự gồm chữ số và chữ cái viết hoa, không có lựa chọn chuyển sang chữ thường. Nếu nơi nhận dữ liệu yêu cầu dạng chữ thường, cần kiểm tra quy tắc chấp nhận của nơi đó thay vì coi công cụ đã hỗ trợ sẵn. Việc thay đổi cách viết có thể ảnh hưởng đến so sánh chuỗi hoặc kiểm tra định dạng trong hệ thống phân biệt hoa và thường. Chưa có bằng chứng tương thích với mọi thư viện nhận ULID.
Các ULID tạo trong cùng một mili giây có luôn tăng theo thứ tự không?
Không. Khi dấu thời gian giống nhau, thứ tự so sánh phụ thuộc phần ngẫu nhiên và phần này được tạo mới cho từng mã, không được điều chỉnh để luôn tăng. Danh sách trên màn hình vẫn giữ thứ tự tạo, nhưng một hệ thống sắp xếp lại theo chuỗi có thể đưa các mã đó sang thứ tự khác. Nếu ứng dụng cần phân biệt chính xác trình tự các thao tác diễn ra cùng mili giây, chỉ dùng các mã này là chưa đủ; cần một thông tin thứ tự được quản lý riêng.
ULID được tạo có chắc chắn không bao giờ trùng không?
Không có bảo đảm tuyệt đối như vậy trong công cụ. Thành phần ngẫu nhiên có không gian giá trị lớn, nhưng phần triển khai không tìm mã trùng hoặc so sánh với các mã đã sử dụng trước đây. Tên gọi “duy nhất” không nên được hiểu là mỗi mã đã trải qua kiểm chứng trên toàn bộ hệ thống. Khi một ứng dụng không chấp nhận trùng định danh, cơ sở dữ liệu hoặc nơi tiếp nhận cần từ chối giá trị trùng và ứng dụng cần có cách xử lý phù hợp.
Vì sao thao tác sao chép toàn bộ danh sách có thể thất bại?
Thao tác này có thể thất bại vì trình duyệt hoặc môi trường trang không cho phép truy cập Clipboard, quyền bị từ chối hoặc API không được hỗ trợ trong điều kiện sử dụng hiện tại. Phần xử lý có thông báo lỗi khi yêu cầu ghi bộ nhớ tạm không thành công, nhưng chưa đủ dữ liệu để xác định nguyên nhân cho một thiết bị cụ thể. Nếu danh sách vẫn hiển thị, lỗi đó không chứng minh mã bị sai. Khi đã được sao chép, nội dung gồm toàn bộ mã và dấu xuống dòng giữa chúng.
Có nên dùng ULID này làm mật khẩu hoặc token truy cập không?
Không nên coi ULID từ công cụ này là mật khẩu hay token truy cập chỉ vì nó chứa dữ liệu ngẫu nhiên. Mã được thiết kế cho mục đích định danh, đồng thời phần đầu có thể cho biết thông tin về thời gian tạo. Một cơ chế truy cập cần được thiết kế riêng, bao gồm yêu cầu về tính bí mật, thời hạn, thu hồi và cách kiểm tra quyền. Việc lấy ngẫu nhiên qua API mật mã không tự xác nhận rằng toàn bộ quy trình đáp ứng các yêu cầu đó hoặc đã được đánh giá bảo mật.


17 bình luận
Đặng Văn Thành
Danh sách ULID được trình bày rõ ràng, dễ kiểm tra và sao chép. Đây là một công cụ nhỏ nhưng rất hữu ích.
Dương Ngọc Hà
Giao diện đẹp, thao tác đơn giản, không có quảng cáo che màn hình. Mong có thêm chức năng sao chép từng ULID bằng một nút riêng.
Trần Hữu Bình
Công cụ rất nhẹ, mở trên điện thoại vẫn thao tác được. Phần nhập số lượng cũng dễ nhìn và không bị rối.
Ngô Hải Nam
Nếu có thêm tùy chọn xuất danh sách ULID thành file TXT hoặc CSV thì sẽ tuyệt vời hơn.
Lý Quốc Châu
Trang này có nhiều tiện ích thực tế, từ tạo ULID đến tính ETA. Không cần mở nhiều tab để tìm từng công cụ riêng.
Dương Đức Ngọc
Hơi tiếc là mình chưa thấy giải thích ngắn về ULID dành cho người mới. Thêm phần hướng dẫn thì sẽ thân thiện hơn.
Bùi Quốc Thảo
Tạo 100 ULID trong vài giây, quá tiện cho dev cần dữ liệu mẫu. Mong website giữ tốc độ như hiện tại.
Võ Tiến Yến
ulid generator xài ok lắm, tạo số lượng bao nhiêu cũng nhanh, giao diện nhìn sạch sẽ nữa.
Huỳnh Minh Hoàng
Các tiện ích như Bcrypt, Emoji picker và ETA calculator được đặt cạnh nhau khá hợp lý, lúc làm việc cần gì là tìm được ngay.
Võ Tiến Trang
Công cụ hoạt động ổn định, các ULID tạo ra nhìn đúng định dạng và rất tiện cho việc kiểm thử dữ liệu.
Trần Hữu Thắng
Mình góp ý nên có nút làm mới hoặc xóa nhanh danh sách ULID để thao tác thuận tiện hơn khi tạo nhiều lần.
Lê Minh Vy
Mình thường dùng Bcrypt để băm mật khẩu, nay thấy thêm ULID generator và các công cụ khác trên cùng website khá tiện.
Lý Quốc Trang
Mình thích phần Trình tạo ULID vì không cần đăng nhập hay cài thêm phần mềm. Mở lên là dùng được luôn.
Hồ Hữu Hương
Tính năng tùy chỉnh số lượng rất hữu ích, tạo một lúc vài chục ULID đỡ mất công thao tác nhiều lần.
Vũ Minh Nhung
Cho mình hỏi ULID được tạo ra có đảm bảo sắp xếp theo thời gian không? Mình đang muốn dùng cho mã định danh trong cơ sở dữ liệu.
Phan Văn Ngọc
ULID generator này tiện hơn mình nghĩ, đặc biệt là danh sách kết quả có thể xem liên tục mà không phải bấm từng lần.
Vũ Quốc Mai
Công cụ tạo ULID dùng rất nhanh, giao diện gọn và dễ hiểu. Mình chỉ cần nhập số lượng là có ngay danh sách ULID để dùng.