Trình tạo UUID

Tùy chọn

Số tạo ra

Số

Trình tạo UUID/GUID/ULID/NanoID trực tuyến miễn phí hỗ trợ 5 định dạng ID duy nhất, tạo hàng loạt tối đa 100, định dạng tùy chỉnh và xác thực UUID. Sẵn sàng sử dụng ngay lập tức — hoàn hảo cho khóa chính cơ sở dữ liệu và tạo dữ liệu kiểm thử.

Đề xuất Liên quan

UUID là gì?

UUID (Universally Unique Identifier) là một định danh 128-bit được tiêu chuẩn hóa bởi Open Software Foundation (OSF), được định nghĩa trong RFC 4122. Mục đích của nó là cho phép các hệ thống phân tán xác định thông tin một cách duy nhất mà không cần cơ quan trung ương để gán ID.

Một UUID tiêu chuẩn trông như `550e8400-e29b-41d4-a716-446655440000`, bao gồm 32 chữ số thập lục phân được chia thành 5 nhóm (8-4-4-4-12) bởi các dấu gạch nối. Về mặt lý thuyết, xác suất va chạm của UUID v4 là khoảng 1/10^36 — nếu bạn tạo 1 tỷ UUID mỗi giây trong khoảng 800 năm, xác suất của một lần va chạm duy nhất sẽ là khoảng 50%, không đáng kể trong thực tế.

UUID được sử dụng rộng rãi cho khóa chính cơ sở dữ liệu, ID theo dõi phân tán, ID yêu cầu, ID theo dõi nhật ký, đặt tên tệp duy nhất, ID dữ liệu kiểm thử và định danh phiên. Hầu hết tất cả các ngôn ngữ lập trình chính đều bao gồm các thư viện tạo UUID tích hợp sẵn.

Trường hợp sử dụng

  • Tạo UUID v4 làm khóa chính cho các bản ghi bảng trong quá trình thiết kế cơ sở dữ liệu để tránh rò rỉ khối lượng dữ liệu từ ID tự tăng
  • Sử dụng ULID làm ID yêu cầu/theo dõi toàn cục có thể sắp xếp trong các hệ thống phân tán hoặc kiến trúc vi dịch vụ
  • Tạo hàng loạt UUID làm dữ liệu kiểm thử và ID đơn hàng/người dùng giả lập trong quá trình phát triển API và kiểm thử tích hợp
  • Sử dụng NanoID thay vì UUID trong các liên kết ngắn frontend hoặc URL chia sẻ — ngắn hơn, sạch hơn, không cần mã hóa URL
  • Sử dụng UUID v5 để tạo ID xác định từ các không gian tên cố định, đảm bảo cùng đầu vào luôn tạo ra cùng đầu ra
  • Sử dụng tính năng xác thực để xác định loại và phiên bản ID khi gặp các ID định dạng không xác định trong nhật ký gỡ lỗi hoặc tài liệu của bên thứ ba

Cách Sử dụng

  1. Chọn loại ID mong muốn từ các thẻ ở trên: UUID v4 (khuyến nghị), v1, v5, ULID hoặc NanoID
  2. Nếu chọn UUID v5, hãy nhập chuỗi không gian tên; các ID khác có thể đặt tùy chọn định dạng trực tiếp
  3. Chuyển đổi các tùy chọn chữ hoa và dấu gạch nối theo nhu cầu, đặt số lượng tạo hàng loạt (1-100) thông qua các nút nhanh hoặc thanh trượt
  4. Nhấp vào nút tạo để xem kết quả — sao chép từng cái, sao chép tất cả cùng lúc hoặc xuất dưới dạng TXT/JSON
  5. Để xác thực ID hiện có, chuyển đến tab "Xác thực" và dán chuỗi ID để nhận thông tin loại và phiên bản

Tính năng

  • Năm loại ID trong một công cụ: UUID v1 (dấu thời gian), v4 (ngẫu nhiên), v5 (không gian tên), ULID (có thể sắp xếp) và NanoID (an toàn URL) — một công cụ đáp ứng mọi nhu cầu của ngăn xếp công nghệ
  • Xác thực và nhận dạng UUID: Chuyển đến tab Xác thực, dán bất kỳ ID nào để xác định phiên bản UUID hoặc phát hiện định dạng ULID/NanoID — giải quyết sự cố nhanh chóng trong quá trình gỡ lỗi
  • Tạo hàng loạt tối đa 100: Tạo bất kỳ số lượng nào từ 1 đến 100 ID cùng lúc — không còn sao chép thủ công từng cái một cho dữ liệu kiểm thử nữa
  • Định dạng linh hoạt: Chuyển đổi chữ hoa và dấu gạch nối cho UUID để phù hợp với yêu cầu định dạng của cơ sở dữ liệu, URL và tệp cấu hình
  • Xuất và lịch sử cục bộ: Sao chép tất cả bằng một cú nhấp, xuất tệp TXT/JSON, lịch sử tạo được lưu cục bộ để khôi phục ngay lập tức — các thao tác hàng loạt hiệu quả hơn
  • Ngẫu nhiên an toàn phía máy khách: Sử dụng API crypto của trình duyệt cho các số ngẫu nhiên an toàn về mặt mật mã, ID không bao giờ rời khỏi thiết bị của bạn, hoạt động ngoại tuyến

Ví dụ mã

Tạo UUID v4 trong JavaScript

javascript

Các trình duyệt hiện đại và Node.js 14.17+ có Web Crypto API tích hợp sẵn, cho phép tạo UUID v4 trực tiếp mà không cần thư viện bên thứ ba.

// Trình duyệt hiện đại / Node.js 19+
const id = crypto.randomUUID();
console.log(id); // "550e8400-e29b-41d4-a716-446655440000"

// Node.js 14.17 - 18.x
const crypto = require('crypto');
const id = crypto.randomUUID();

Tạo hàng loạt UUID trong Python

python

Sử dụng mô-đun uuid của thư viện chuẩn Python để tạo nhiều UUID v4 hàng loạt, lý tưởng cho việc chuẩn bị dữ liệu kiểm thử.

import uuid

# Tạo một UUID đơn lẻ
uid = uuid.uuid4()
print(uid)

# Tạo hàng loạt 10 UUID
for _ in range(10):
    print(uuid.uuid4())

# Tạo UUID chữ hoa không có dấu gạch nối
print(uuid.uuid4().hex.upper())

Tạo UUID từ Dòng lệnh Shell

bash

Nhanh chóng tạo UUID trong terminal Linux/macOS, phù hợp để sử dụng trong các tập lệnh shell.

# Linux
uuidgen

# macOS
uuidgen | tr 'A-Z' 'a-z'

# Đọc trực tiếp từ tệp ngẫu nhiên của hệ thống (phương pháp thô nhất)
cat /proc/sys/kernel/random/uuid

Nên chọn phương án ID duy nhất nào?

UUID không phải là lựa chọn duy nhất — ID tự tăng của cơ sở dữ liệu và Snowflake cũng là những phương án khóa chính phổ biến. Hãy xem xét «quy mô dữ liệu, có cần duy nhất toàn cục hay không, có cần sắp xếp theo thời gian hay không» trước khi chọn phương án cụ thể — điều này giúp tránh nhiều sai lầm.

UUID v1 / v4 / v5 / ULID / NanoID: nên chọn cái nào?

5 loại ID có sự đánh đổi khác nhau về quy mô dữ liệu, khả năng sắp xếp và độ dài ký tự. Hãy quyết định dựa trên «dùng ở đâu + có cần sắp xếp + URL có dùng trực tiếp không», đáng tin cậy hơn việc chọn theo bản thân con số.

Phương ánTình huống khuyến nghịKhả năng sắp xếpĐộ dàiMức khuyến nghị
UUID v1Hệ thống nội bộ cần sắp xếp theo thời gian, có thể chấp nhận rò rỉ địa chỉ MAC và thời gian tạoTheo thứ tự thời gian36 ký tự⚠ Thường không khuyến nghị (rò rỉ quyền riêng tư)
UUID v4Khóa chính cơ sở dữ liệu, định danh chung, hầu hết các tình huống nghiệp vụKhông theo thứ tự (ngẫu nhiên)36 ký tự✓ Lựa chọn phổ thông
UUID v5Các tình huống cần đầu ra xác định (cùng đầu vào → cùng UUID)Không theo thứ tự36 ký tự✓ Khuyến nghị khi không gian tên cố định
ULIDKhóa chính hệ thống phân tán, theo dõi nhật ký, chỉ mục cần sắp xếp theo thời gianTheo thứ tự thời gian (48 bit đầu là dấu thời gian mili-giây)26 ký tự✓ Lựa chọn hàng đầu cho hệ thống phân tán
NanoIDURL ngắn, định danh Cookie, tham chiếu JS phía frontendKhông theo thứ tự (ngẫu nhiên)21 ký tự (mặc định)✓ Lựa chọn hàng đầu cho tình huống ID ngắn

UUID vs ID tự tăng cơ sở dữ liệu vs ID Snowflake: nên chọn phương án khóa chính nào?

Ba phương án này là những lựa chọn phổ biến nhất cho khóa chính backend, quyết định khả năng mở rộng, an toàn đồng thời và đặc điểm hiệu năng của hệ thống. Quyết định theo «quy mô dữ liệu / có yêu cầu duy nhất toàn cục không / có cần khả năng đọc không» có thể tránh việc điều chỉnh kiến trúc sau này.

ChiềuUUIDID tự tăng CSDLSnowflake
Duy nhất toàn cục✓ Có (về mặt lý thuyết)✗ Không (phân mảnh CSDL sẽ trùng lặp)✓ Có (data center + worker ID đảm bảo)
Rò rỉ khối lượng dữ liệu✓ Không rò rỉ✗ Rò rỉ trực tiếp (tăng dần 1, 2, 3 phơi bày khối lượng dữ liệu thật)⚠ Bit thời gian rò rỉ thời gian tạo (không trực tiếp rò rỉ tổng)
Khả năng sắp xếp✗ Không theo thứ tự (ngoại trừ ULID)✓ Tăng đơn điệu (thân thiện với B-Tree)✓ Tăng xu hướng (có thứ tự trong cùng mili-giây)
Phân mảnh CSDL✓ Hỗ trợ tự nhiên✗ Cần bộ phát số hoặc cải tiến✓ Phân biệt qua worker ID
Chi phí lưu trữ⚠ Cao (BINARY(16) 16 byte)✓ Thấp (BIGINT 8 byte)✓ Thấp (BIGINT 8 byte)
Tình huống phù hợpKhóa chính đa dịch vụ/phân tán, định danh đối ngoại, nghiệp vụ nhạy cảm về khối lượng dữ liệuỨng dụng đơn thể, hệ thống quản trị backend, không cần duy nhất toàn cụcIM đồng thời cao, số đơn hàng, ID tin nhắn (cần tự triển khai)

Best Practices

Khóa chính cơ sở dữ liệu production nên ưu tiên UUID v4 hoặc ULID, tránh v1

48 bit cuối của UUID v1 là địa chỉ MAC, 48 bit đầu là dấu thời gian có độ chính xác 100ns — **hai trường này có thể được khôi phục thành dấu vân tay máy và thời gian tạo**. Trong RFC 4122, v1 đã nêu rõ ràng chỉ sử dụng khi «cần khả năng tương thích ngược». Môi trường production nên ưu tiên v4 (ngẫu nhiên) hoặc ULID (có thể sắp xếp), v1 chỉ thỉnh thoảng dùng khi gỡ lỗi hoặc cần truy vết máy tạo. **Tuyệt đối không** dùng v1 làm ID người dùng, ID thiết bị hoặc số đơn hàng phơi bày ra ngoài.

Nên chọn UUID v1, v4 hay v5?

Độ dài UUID 128 bit ≠ giá trị entropy: v4 thực tế chỉ có 122 bit

Mặc dù UUID v4 có tổng chiều dài 128 bit, **4 bit đầu là số phiên bản (cố định là 0100), 2 bit cuối là số biến thể (cố định là 10)**, bit ngẫu nhiên thực sự chỉ có 122 bit. Đây là ràng buộc định dạng quy định trong RFC 4122, **bất kỳ thư viện UUID v4 nào tuyên bố «128 bit hoàn toàn ngẫu nhiên» đều là triển khai sai**. Ngoài ra, trong 64 bit cuối của v4, 2 bit cao của byte thứ 7 cũng là trường biến thể, entropy thực tế còn thấp hơn. Khi thiết kế hệ thống nên tính toán bảo mật theo 122 bit (thay vì 128 bit), tránh đánh giá thấp rủi ro va chạm.

RFC 4122 - Đặc tả UUID

Lưu trữ UUID nhất thiết phải dùng cột BINARY(16) thay vì VARCHAR(36)

Chuỗi UUID v4 `550e8400-e29b-41d4-a716-446655440000` trông có vẻ gọn, nhưng thực tế VARCHAR(36) lưu 36 byte + 2 byte chiều dài = 38 byte, **nhiều hơn 2,4 lần dung lượng lưu trữ so với BINARY(16)**. MySQL/PostgreSQL/MSSQL đều có hàm UUID tích hợp hỗ trợ ghi trực tiếp BINARY(16), kích thước chỉ mục cũng giảm một nửa. Khi bảng vượt quá 100 triệu bản ghi, chỉ mục khóa chính VARCHAR(36) sẽ làm chiều cao B-Tree tăng thêm 1-2 tầng, **hiệu năng truy vấn giảm 30-50%**. Khi hiển thị frontend mới chuyển sang chuỗi, tầng nghiệp vụ nhất quán truyền BINARY(16).

Bảng so sánh UUID / ULID / NanoID

Tình huống URL dùng NanoID hoặc UUID không dấu gạch nối, tránh mã hóa URL

Bộ ký tự UUID v4 là `[0-9a-f-]`, **dấu gạch nối - trong URL path cần mã hóa URL hai lần** (đầu tiên thoát thành %2D, sau đó thoát thành %252D), rất xấu. Hai giải pháp: **(1) tình huống URL dùng trực tiếp NanoID** (mặc định 21 ký tự an toàn URL); **(2) UUID v4 + tắt dấu gạch nối** xuất ra 32 ký tự hex thuần, làm phân đoạn URL path không cần mã hóa. Tình huống Cookie cũng ưu tiên NanoID (A-Za-z0-9_-) hoặc UUID không dấu gạch nối, tránh các ký tự `+` `/` `=` (bộ ký tự Base64).

Có thể xóa dấu gạch nối hoặc chuyển UUID thành chữ hoa không?

Sau khi tạo hàng loạt nhất thiết phải khử trùng lặp, bug của trình tạo có thể gây trùng lặp

Xác suất va chạm UUID v4 khoảng 1/10^36, về mặt lý thuyết không cần khử trùng lặp — **nhưng trong kỹ thuật đừng tin vào lý thuyết**. Sự cố RNG của kernel Linux, bug triển khai `crypto.randomUUID` trong các phiên bản đầu của Node.js, nguồn entropy không đủ khi Cloud VM khởi động và các sự cố thực tế khác đều đã khiến UUID được tạo hàng loạt chứa giá trị trùng lặp. **Trong môi trường production, sau khi tạo hàng loạt 100.000+ UUID nhất thiết phải dùng `SELECT id, COUNT(*) FROM t GROUP BY id HAVING COUNT(*) > 1` để khử trùng lặp kiểm tra một lần**, nếu phát hiện vấn đề lập tức khôi phục phiên bản trình tạo. Đây là thực tiễn tốt nhất đổi bằng bài học xương máu trong các tình huống di chuyển dữ liệu và nhập hàng loạt.

Có thể tạo nhiều UUID cùng lúc không?

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

Sự khác biệt giữa UUID và GUID là gì?

UUID (Universally Unique Identifier) và GUID (Globally Unique Identifier) về cơ bản là cùng một thứ với tên gọi khác nhau: UUID là tên chính thức của tiêu chuẩn IETF (RFC 4122), trong khi GUID là thuật ngữ ưa dùng của Microsoft trong hệ sinh thái Windows. Cả hai đều có định dạng 128-bit giống hệt nhau như `550e8400-e29b-41d4-a716-446655440000`. UUID tiêu chuẩn được tạo bởi công cụ này có thể sử dụng thay thế cho nhau trong mọi tình huống yêu cầu GUID.

Làm thế nào để chọn giữa UUID v1, v4 và v5?

UUID v1 dựa trên dấu thời gian và địa chỉ MAC — được sắp xếp theo thời gian và có thể theo dõi, nhưng có thể làm rò rỉ thông tin địa chỉ MAC. UUID v4 hoàn toàn ngẫu nhiên, là lựa chọn được sử dụng phổ biến và an toàn nhất, phù hợp cho hầu hết các tình huống khóa chính và định danh. UUID v5 là phiên bản không gian tên dựa trên băm SHA-1 — cùng không gian tên + cùng tên sẽ luôn tạo ra cùng một UUID, lý tưởng cho các tình huống đầu ra xác định. Đối với phát triển thông thường, UUID v4 là lựa chọn mặc định.

ULID và NanoID có những ưu điểm gì so với UUID v4?

ULID (26 ký tự) ngắn hơn UUID (36 ký tự có dấu gạch nối) và có thể được sắp xếp theo từ điển theo thời gian tạo, làm cho nó lý tưởng cho chỉ mục cơ sở dữ liệu và theo dõi nhật ký. NanoID (mặc định 21 ký tự) thậm chí còn ngắn hơn và nhanh hơn, sử dụng các ký tự an toàn cho URL nên không cần thoát ký tự trong URL và cookie — nhỏ hơn UUID khoảng 30%. Cả ba đều có xác suất va chạm không đáng kể, nhưng khả năng sắp xếp của ULID nổi bật trong các hệ thống phân tán, trong khi NanoID thân thiện hơn cho các tình huống frontend/URL.

Tôi có thể tạo nhiều UUID cùng lúc không?

Có. Công cụ này hỗ trợ tạo hàng loạt từ 1 đến 100 ID. Đặt số lượng thông qua các nút nhanh hoặc thanh trượt, sau đó tạo bằng một cú nhấp chuột — hoàn hảo cho việc tạo dữ liệu kiểm thử, nhập hàng loạt và chuẩn bị ID duy nhất cho các tập lệnh. Sau khi tạo, bạn có thể sao chép tất cả kết quả cùng lúc hoặc xuất dưới dạng tệp TXT hoặc JSON.

Hướng dẫn tạo hàng loạt

Tôi có thể xác thực xem một chuỗi có phải là UUID hợp lệ không?

Có. Chuyển đến tab "Xác thực" và dán bất kỳ chuỗi nào — công cụ sẽ tự động nhận dạng và xác thực: UUID tiêu chuẩn (v1/v3/v4/v5) sẽ báo cáo số phiên bản cụ thể của chúng, và cũng nhận dạng các định dạng ULID (Crockford Base32 26 ký tự) và NanoID (ký tự an toàn URL 21 ký tự), làm cho nó rất thuận tiện để nhanh chóng giải quyết các sự cố định dạng ID trong quá trình phát triển và gỡ lỗi.

Tạo UUID trực tuyến có an toàn không? ID của tôi có bị rò rỉ lên máy chủ không?

Hoàn toàn an toàn. Tất cả việc tạo và xác thực ID chạy cục bộ trong trình duyệt của bạn thông qua JavaScript, sử dụng crypto.getRandomValues() cho các số ngẫu nhiên an toàn về mặt mật mã. Không có ID nào được tạo được gửi đến bất kỳ máy chủ nào và không có lịch sử tạo nào được lưu trữ trên đám mây. Nó hoạt động ngay cả khi ngoại tuyến, làm cho nó phù hợp cho mạng nội bộ doanh nghiệp và các dự án nhạy cảm.

Tôi có thể xóa dấu gạch nối hoặc chuyển UUID thành chữ hoa không?

Có. Đối với UUID v1/v4/v5, công cụ cung cấp hai công tắc: "Chữ hoa" chuyển đổi kiểu chữ đầu ra, và "Dấu gạch nối" cho phép bạn xóa các dấu gạch ngang (hữu ích cho URL, tệp cấu hình hoặc cơ sở dữ liệu yêu cầu định dạng không có dấu gạch nối). ULID và NanoID mặc định không có dấu gạch nối và cũng hỗ trợ chuyển đổi kiểu chữ.

Tại sao nên sử dụng công cụ trực tuyến thay vì dòng lệnh để tạo UUID?

Các công cụ dòng lệnh (như uuidgen của Linux, mô-đun uuid của Python) yêu cầu môi trường phát triển. Công cụ trực tuyến hoạt động ngay lập tức trong trình duyệt của bạn mà không cần cài đặt. Ngoài ra, công cụ này tích hợp nhận dạng phiên bản UUID, xuất hàng loạt và các tính năng lịch sử cục bộ — thuận tiện hơn khi làm việc trên nhiều thiết bị (ví dụ: tạo ID cho đồng nghiệp không chuyên về kỹ thuật) hoặc khi bạn cần ID ngay lập tức.

Thuật ngữ

UUID
Universally Unique Identifier, độ dài 128 bit, tiêu chuẩn RFC 4122, các phiên bản phổ biến bao gồm v1 (dấu thời gian+MAC), v4 (ngẫu nhiên), v5 (băm SHA-1).
GUID
Globally Unique Identifier, thuật ngữ của Microsoft cho UUID — cả hai giống hệt nhau về định dạng và mục đích.
ULID
Universally Unique Lexicographically Sortable Identifier, 26 ký tự sử dụng mã hóa Crockford Base32, 48 bit đầu tiên là dấu thời gian — có thể sắp xếp theo thời gian tạo.
NanoID
Một trình tạo ID duy nhất nhẹ, mặc định 21 ký tự an toàn URL (A-Za-z0-9_-), ngắn hơn và nhanh hơn UUID, lý tưởng cho các tình huống frontend và URL.
UUID v1
Phiên bản UUID dựa trên dấu thời gian và địa chỉ MAC, có thể sắp xếp theo thời gian nhưng có thể làm rò rỉ địa chỉ MAC và thời gian tạo — kém an toàn hơn v4.
UUID v4
Phiên bản UUID hoàn toàn dựa trên số ngẫu nhiên, được sử dụng rộng rãi nhất, xác suất va chạm không đáng kể, là lựa chọn mặc định trong phát triển.
UUID v5
Phiên bản UUID không gian tên dựa trên băm SHA-1 — cùng không gian tên + cùng đầu vào tên sẽ tạo ra đầu ra UUID giống hệt nhau, phù hợp cho các tình huống xác định.
Xác suất va chạm
Xác suất mà hai ID được tạo ngẫu nhiên sẽ giống hệt nhau. Xác suất va chạm của UUID v4 là khoảng 1 trên 17 tỷ nghìn tỷ, không đáng kể trong kỹ thuật thực tế.
Crockford Base32
Mã hóa Base32 được thiết kế bởi Douglas Crockford sử dụng chữ hoa và chữ số loại trừ I/L/O/U để tránh các ký tự gây nhầm lẫn — được sử dụng bởi ULID.

So sánh UUID / ULID / NanoID

Đặc điểmUUID v4ULIDNanoID
Độ dài36 ký tự (có dấu gạch nối) / 32 ký tự (không dấu gạch nối)26 ký tự21 ký tự (mặc định)
Tập ký tựThập lục phân (0-9a-f)Crockford Base32 (32 ký tự)An toàn URL (64 ký tự)
Khả năng sắp xếpKhông theo thứ tự (ngẫu nhiên)Theo thứ tự thời gianKhông theo thứ tự (ngẫu nhiên)
An toàn URLCần thoát ký tự (dấu gạch nối + chữ/số)Hầu hết an toàn (chữ hoa + chữ số)Hoàn toàn an toàn URL
Tốc độ tạoNhanhNhanhNhanh hơn UUID khoảng 60%
Xác suất va chạm1/10^361/10^361/10^34 (tại 21 ký tự)
Trường hợp sử dụng điển hìnhKhóa chính CSDL, ID chungHệ thống phân tán, theo dõi nhật kýURL ngắn, ID frontend, cookie

Phương pháp tạo UUID theo ngôn ngữ

Ngôn ngữ
JavaScriptcrypto.randomUUID() // Trình duyệt hiện đại / Node.js 19+
Pythonimport uuid; uuid.uuid4()
JavaUUID.randomUUID()
Gogithub.com/google/uuid; uuid.New()
Bash/Linuxuuidgen hoặc cat /proc/sys/kernel/random/uuid

Authoritative References