Thêm game tại WuGames.ioTài trợKhám phá kho game trình duyệt miễn phí — chơi ngay, không tải, không đăng ký.Chơi ngay

Trình tạo số ngẫu nhiên

Trình tạo số ngẫu nhiên trực tuyến miễn phí. Chọn số trong khoảng min — max bất kỳ, tạo một số hoặc danh sách dài, với bước nhảy và dấu phân cách tùy chỉnh.

Số ngẫu nhiên được tạo ra như thế nào?

Có hai họ: số ngẫu nhiên thực và số giả ngẫu nhiên. Sự khác biệt quan trọng hơn nhiều người tưởng.

Ngẫu nhiên thực đến từ các hiện tượng vật lý không thể dự đoán về mặt nguyên lý — thời điểm phân rã phóng xạ, nhiễu khí quyển thu qua micro, nhiễu nhiệt bên trong các bộ tạo dao động vòng của CPU. Tính ngẫu nhiên là bản chất, không chỉ là khó nhìn thấu. Các bộ tạo số ngẫu nhiên phần cứng trên chip hiện đại (RDRAND của Intel/AMD, TrustZone của ARM) lấy entropy trực tiếp từ những nguồn này.

Giả ngẫu nhiên đến từ các thuật toán xác định — Mersenne Twister, xorshift, PCG, ChaCha20. Cùng một hạt giống (seed) luôn cho cùng một dãy. Chúng cực nhanh và có thuộc tính thống kê rất tốt (vượt qua các bài kiểm tra như Diehard và TestU01), nhưng không thực sự khó đoán đối với người biết thuật toán và hạt giống. crypto.getRandomValues của trình duyệt trộn đầu ra giả ngẫu nhiên với entropy từ hệ điều hành và đổi seed thường xuyên, vì thế được xem là mạnh về mật mã dù về kỹ thuật vẫn là một PRNG.

Vì sao sự khác biệt này quan trọng?

Mật mã: khóa mã hóa, token phiên, bắt tay TLS đều cần không-đoán-được. Lỗ hổng ở nguồn ngẫu nhiên có thể phá toàn bộ hệ thống — ví dụ lỗi OpenSSL trên Debian năm 2008 khiến khoảng 250.000 khóa SSH có thể đoán được.

Công bằng: trong game, cờ bạc, xổ số, ngẫu nhiên đoán được là kẽ hở. Các RNG được chứng nhận (loại dùng trong sòng bài có quy định) đòi hỏi cả độ mạnh mật mã lẫn dấu vết kiểm toán.

Mô phỏng: phương pháp Monte Carlo trong vật lý, tài chính, học máy chạy trên khối lượng số ngẫu nhiên khổng lồ. Tốc độ ở đây quan trọng hơn độ mạnh mật mã — phần lớn nhà nghiên cứu dùng Mersenne Twister hoặc PCG, với seed cố định để tái lập kết quả.

Token bảo mật: link đặt lại mật khẩu, khóa API, mã 2FA phải khó đoán. Trình tạo yếu ở đây là lỗi câm — không có gì hiển nhiên hỏng, nhưng kẻ tấn công có thể đoán token.

Lấy mẫu: trong khảo sát và thống kê, mỗi cá thể trong tổng thể phải có xác suất chọn bằng nhau. Bộ tạo lệch sẽ ra dữ liệu lệch, và sai lệch đó thường chỉ lộ ra khi kết luận đã sai.

Giới thiệu trình tạo số ngẫu nhiên

Chọn một số bất kỳ giữa min và max — hoặc tạo cả một danh sách số ngẫu nhiên trong một lần. Trình tạo này lấy ngẫu nhiên từ nguồn mạnh về mật mã trong trình duyệt (crypto.getRandomValues — cùng một nguồn dùng để tạo khóa phiên TLS), thay vì Math.random cũ vốn nhanh nhưng có thể đoán được trạng thái nội bộ chỉ sau vài đầu ra. Với việc thường ngày — "ai đi trước", "ăn quán nào tối nay", quay thưởng trong văn phòng — Math.random là đủ. Nhưng với mọi tình huống mà việc đoán trước có hậu quả, dùng nguồn crypto là lựa chọn đúng.

Tham số bước (step) quy định khoảng cách giữa các giá trị được phép. Bước 1 trên khoảng 1 — 10 cho ra số nguyên 1, 2, 3, ..., 10. Bước 0.5 cùng khoảng cho ra 1, 1.5, 2, 2.5, ..., 10. Bước 2 trên 0 — 20 cho ra số chẵn. Đặt số lượng lớn hơn 1 sẽ chuyển sang chế độ tạo danh sách và nối các kết quả bằng dấu phân cách bạn chọn — tiện khi cần dữ liệu mẫu nhanh để test.

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

Có — nó lấy từ crypto.getRandomValues, được Web Crypto API của W3C định nghĩa là mạnh về mật mã. Trên thực tế trình duyệt ủy quyền cho bể entropy của hệ điều hành (/dev/urandom trên Linux/macOS, BCryptGenRandom trên Windows), cùng một nguồn các thư viện TLS và bộ tạo khóa SSH dùng. Lưu ý: "phù hợp cho mật mã" nghĩa là nguồn entropy tốt; còn việc dùng có an toàn hay không còn phụ thuộc bạn xử lý đầu ra ra sao. Tạo khóa 256 bit ở đây rồi dán vào chat công khai thì lập tức mất giá trị. Cho việc dùng tại chỗ một lần (mật khẩu mạnh, token phiên trong ứng dụng của bạn), đây cùng chất lượng ngẫu nhiên như một thư viện mật mã chuyên nghiệp.

Không lấy được từ công cụ này — crypto.getRandomValues cố tình không cho đặt seed để không thể phát lại đầu ra. Nếu bạn cần ngẫu nhiên tái lập (mô phỏng thống kê, debug, công việc khoa học), hãy dùng PRNG có seed thay thế. Trong JavaScript, cài mulberry32 hoặc bộ tạo có seed nhỏ tương tự rồi truyền seed cố định; cùng seed luôn cho cùng dãy. Đánh đổi: dãy có seed thì tái lập được, nhưng ai biết seed cũng có thể phát lại — nên đừng dùng PRNG có seed cho bảo mật.

An toàn đến 2^53 - 1, tức khoảng 9.007 nghìn tỷ (9.007.199.254.740.991). Đây là Number.MAX_SAFE_INTEGER của JavaScript — cận trên các số nguyên có thể biểu diễn chính xác trong số thực 64 bit mà không bị làm tròn. Vượt ngưỡng đó, các số nguyên bắt đầu mất độ chính xác (khoảng cách giữa hai số biểu diễn được vượt 1). Với hầu hết trường hợp dùng — xúc xắc, xổ số, phần trăm, giá trị tài chính — giới hạn này không liên quan; chỉ quan trọng khi tạo ID rất lớn hoặc nonce mật mã, mà những thứ đó vốn dùng công cụ khác (dựa trên BigInt hoặc đầu ra chuỗi hex).

Đặt min = 0, max = 1, step nhỏ như 0.01 hoặc 0.001 tùy độ chính xác mong muốn. Step 0.01 cho hai chữ số thập phân (0.00 đến 1.00). Step 0.001 cho ba. Nếu bạn cần ngẫu nhiên đều liên tục (số thực bất kỳ trong [0, 1)), nguyên hàm cơ sở là Math.random — và với chính trường hợp đó, gọi Math.random() trong console thường nhanh hơn vào công cụ. Với số thập phân có trọng số hoặc phi đều (Gaussian, mũ), cần công cụ chuyên biệt — trình tạo này phân bố đều trên khoảng yêu cầu.

Có — mặc định mỗi số tạo ra độc lập với nhau, nên trùng không chỉ có thể mà còn dễ xảy ra. Khoảng 1 — 10 và danh sách 10 số gần như luôn có lặp và thiếu vài giá trị (chính là "bài toán sinh nhật" trong xác suất). Nếu bạn cần một mẫu duy nhất — ví dụ rút 10 số khác nhau từ 1 — 100 — cái bạn cần thực sự là lấy mẫu không hoàn lại, mà công cụ này không ép buộc. Mẹo: tạo nhiều số hơn mức cần (ví dụ 30 số từ 1 — 100), rồi loại trùng và lấy N số đầu. Để xáo trộn hoặc rút duy nhất, công cụ dạng shuffler hoặc hoán vị phù hợp hơn.

Math.random() được thiết kế cho tốc độ và tính đúng đắn thống kê, không phải khó-đoán. Các trình duyệt theo lịch sử dùng các thuật toán khác nhau — V8 (Chrome, Node) dùng xorshift128+, SpiderMonkey (Firefox) dùng xorshift; đều nhanh nhưng trạng thái nội bộ nhỏ (~128 bit). Các nhà nghiên cứu đã chỉ ra rằng quan sát vài trăm đầu ra liên tiếp là đủ để dựng lại trạng thái nội bộ và dự đoán mọi giá trị tương lai. Với game, hoạt ảnh, xáo bài cho trải nghiệm một người chơi ngoại tuyến, Math.random() là đủ. Với bất cứ thứ gì nhiều người chơi, dính tới đánh bạc hoặc liên quan bảo mật, crypto.getRandomValues là lựa chọn đúng — và đó là cái công cụ này đang dùng.

Trình tạo cho ra giá trị có dạng min + k × step, với k là số nguyên không âm và bị cắt ở ≤ max. Vậy khoảng 1 — 10 với step 3 cho ra tập {1, 4, 7, 10}, không phải số nguyên bất kỳ giữa 1 và 10. Khoảng 0 — 1 với step 0.1 cho {0, 0.1, 0.2, ..., 1.0}. Nếu step không chia hết (max - min), giá trị cao nhất đạt được sẽ chỉ ngay dưới max — ví dụ 0 — 10 step 3 cho {0, 3, 6, 9} (10 chỉ đạt được nếu = min + k × step với k nào đó). Dùng step 1 cho việc tung xúc xắc số nguyên thông thường.

Không. Việc tạo số diễn ra hoàn toàn ở phía trình duyệt — min, max, step và các số kết quả không bao giờ rời khỏi trang này. Chúng tôi không ghi log, không phân tích, không truyền đi. Hoạt động mạng duy nhất của trang là tải các tài nguyên của chính trang (HTML, CSS, JS). Mở tab Network trước khi bấm Quay số; bạn sẽ thấy 0 request mới. Đó là lý do công cụ này an toàn cho mục đích mật mã — chỉ khi bạn tự sao chép kết quả và dán vào nơi không an toàn thì khóa mới bị lộ.
Trình tạo số ngẫu nhiên — Trình tạo số ngẫu nhiên trực tuyến miễn phí. Chọn số trong khoảng min — max bất kỳ, tạo một số hoặc danh sách dài, với b
Trình tạo số ngẫu nhiên