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

Tạo một số ngẫu nhiên, danh sách, hoặc nhiều bộ số trong bất kỳ phạm vi nào — tất cả được tạo trực tiếp trong trình duyệt của bạn bằng tính ngẫu nhiên an toàn về mặt mật mã học, không bao giờ trên máy chủ.

Nhấn Tạo để quay số
Tùy chọn

Bạn cần một cách nhanh chóng và công bằng để có được một số ngẫu nhiên? Trình tạo số ngẫu nhiên trực tuyến miễn phí này tạo ra một số — hoặc cả một danh sách số — trong bất kỳ phạm vi nào bạn chọn, từ phạm vi đơn giản 1 đến 10 cho đến những phạm vi lên đến hàng tỷ. Đặt giá trị tối thiểu và tối đa vào “Tối thiểu” và “Tối đa”, chọn số lượng số bạn cần với “Số lượng mục chọn”, rồi nhấn “Tạo”. Cả hai giới hạn đều được tính vào kết quả, vì vậy phạm vi từ 1 đến 10 có thể cho ra cả 1 và 10.

Mỗi kết quả được tạo trực tiếp trong trình duyệt của bạn bằng Web Crypto API (crypto.getRandomValues) — công cụ này cung cấp các giá trị ngẫu nhiên an toàn về mặt mật mã học từ nguồn ngẫu nhiên của hệ điều hành. Không có gì được gửi đến máy chủ, không có gì được ghi lại trên máy chủ, và chúng tôi không bao giờ nhìn thấy các số của bạn. Việc tạo diễn ra tức thì, riêng tư, và vẫn hoạt động ngay cả khi kết nối chậm sau khi trang đã tải xong.

Các tùy chọn này được thiết kế cho những tình huống thực tế khi mọi người cần đến số ngẫu nhiên. Bật “Không lặp lại” để đảm bảo không có số nào xuất hiện hai lần — thiết lập bạn cần cho các buổi rút thăm, quay số kiểu xổ số, hoặc chia người vào các nhóm mà không lặp lại. Cần 20 người thắng trong số 500 người tham gia? Đặt “Tối thiểu” thành 1 và “Tối đa” thành 500, bật “Không lặp lại”, đặt “Số lượng mục chọn” thành 20, rồi nhấn “Tạo”. “Thứ tự sắp xếp” sắp xếp kết quả theo thứ tự tăng dần hoặc giảm dần, và một nút sao chép toàn bộ kết quả cùng lúc. Việc chuyển “Định dạng kết quả” từ “Dòng mới” sang “Phân cách bằng khoảng trắng” hoặc “Phân cách bằng dấu phẩy” sẽ hiển thị “Số lượng bộ”: tạo nhiều lần rút thăm độc lập cùng lúc — ví dụ hai mươi bộ, mỗi bộ 3 số, cho hai mươi vòng rút thăm — và “Cho phép trùng lặp giữa các bộ” quyết định liệu cùng một số có thể xuất hiện trong nhiều hơn một bộ hay không.

Tính ngẫu nhiên này thực sự được tạo ra như thế nào? Trình duyệt của bạn cung cấp các giá trị ngẫu nhiên an toàn về mặt mật mã học thông qua Web Crypto API, thay vì thông qua một PRNG JavaScript như Math.random(). Khi bạn nhấn “Tạo”, trang sẽ yêu cầu các giá trị ngẫu nhiên bằng crypto.getRandomValues và dùng chúng để tạo ra các số trong phạm vi bạn đã chọn. Nguồn tính ngẫu nhiên cơ bản này do trình duyệt và hệ điều hành cung cấp, nên trang không cần phải lưu giữ seed (giá trị khởi tạo) hay chuỗi giả ngẫu nhiên của riêng nó.

Việc ánh xạ một giá trị thô vào phạm vi của bạn thường là bước mà các trình tạo âm thầm mắc lỗi, và điều này đáng để nói riêng thành một đoạn. Lấy giá trị modulo với kích thước phạm vi có vẻ là cách đơn giản nhất, nhưng đó cũng chính là cách gây thiên lệch: trừ khi phạm vi chia hết đều cho 2^32, các số nhỏ nhất sẽ xuất hiện thường xuyên hơn một chút so với những số còn lại. Lỗi này được gọi là modulo bias, và nó có thể đo lường được chứ không chỉ là lý thuyết. Thay vào đó, trình tạo này loại bỏ bất kỳ giá trị nào vượt quá bội số chẵn lớn nhất của phạm vi và lấy một giá trị mới — kỹ thuật này được gọi là rejection sampling. Cách này cần thêm vài lần thử, nhưng đổi lại là một đảm bảo chính xác: mỗi số giữa “Tối thiểu” và “Tối đa” có xác suất hoàn toàn bằng nhau, chứ không chỉ gần bằng nhau.

Điều gì khiến một số thực sự ngẫu nhiên? Một số đủ ngẫu nhiên khi các kết quả trước đó không cho biết gì về kết quả tiếp theo — và trên thực tế có ba mức độ cho điều này. Một hàm giả ngẫu nhiên thông thường như Math.random() chạy một thuật toán tất định (deterministic): bất kỳ ai biết được trạng thái nội bộ của nó đều có thể tạo lại toàn bộ chuỗi — điều này ổn cho việc xáo trộn các trang trình chiếu, nhưng không phù hợp cho bất cứ điều gì mà kết quả không được phép đoán trước. Trình tạo an toàn về mặt mật mã học — mức độ mà công cụ này sử dụng — cũng là một thuật toán, nhưng được thiết kế để tạo ra các giá trị không thể đoán trước bằng cách sử dụng một nguồn tính ngẫu nhiên an toàn của hệ thống, và được thiết kế để khiến việc dự đoán giá trị tiếp theo là không khả thi trong thực tế. Tính ngẫu nhiên vật lý, từ các nguồn như nhiễu khí quyển hay phân rã phóng xạ, là một dạng khác với hai mức trên, mặc dù đối với việc lấy một số trong một phạm vi, sự khác biệt thực tế gần như biến mất. Đây chính là lý do tại sao các trình duyệt cung cấp một crypto API riêng thay vì cải tiến Math.random(): cả hai giải quyết những vấn đề khác nhau, và chỉ một trong hai là an toàn khi kết quả thực sự quan trọng đối với ai đó.

Một chuỗi thực sự ngẫu nhiên không được tạo ra để trông có vẻ ngẫu nhiên trong mắt con người. Lấy mười số trong khoảng từ 1 đến 10, và bạn sẽ thường xuyên thấy một số lặp lại, một cặp gần nhau như 7, 7, 8, hoặc một chuỗi ngắn các số lớn liên tiếp — và tất cả những điều đó đều bình thường. Tính ngẫu nhiên thực sự là không thể đoán trước, chứ không phải phân bố đều: mỗi lần rút thăm đều độc lập, các số trước đó hoàn toàn không ảnh hưởng đến các số sau, và không có số nào từng “đến lượt”. Bản năng khăng khăng điều ngược lại được gọi là ngụy biện con bạc (gambler's fallacy), và cũng chính bản năng đó khiến con người trở thành những trình tạo số ngẫu nhiên tệ — khi được yêu cầu tự nghĩ ra một chuỗi ngẫu nhiên, chúng ta tránh lặp lại và trải đều các giá trị hơn nhiều so với những gì xác suất thực sự làm. Kết quả trông gọn gàng đến đáng ngờ thường mang đậm dấu ấn của con người; tính ngẫu nhiên thực sự lại tạo ra các cụm.

Tại sao nên chọn trình tạo số ngẫu nhiên này?

Số ngẫu nhiên xuất hiện ở nhiều nơi hơn hầu hết mọi người nghĩ. Giáo viên gọi học sinh trả lời mà không thiên vị. Streamer và các đội marketing rút thăm người thắng quà tặng và rút thăm trước khán giả — những người cần tin vào kết quả. Người chơi thay thế xúc xắc bị mất hoặc quyết định ai chơi trước, và các giải đấu rút thăm thứ tự xuất phát. Các nhà nghiên cứu chọn một mẫu ngẫu nhiên để kết quả nghiên cứu của họ áp dụng được rộng hơn ngoài những người tình nguyện tham gia. Nhà phát triển tạo dữ liệu thử nghiệm, thiết lập seed cho các mô phỏng, và chọn định danh trong quá trình QA. Điểm chung của tất cả những điều này là một quy trình lựa chọn ngẫu nhiên có thể giải thích được sau đó: vì việc rút thăm sử dụng tính ngẫu nhiên mật mã học và diễn ra hoàn toàn trên thiết bị của bạn, bạn có thể giải thích và ghi lại cách thức quy trình lựa chọn diễn ra nếu có ai đó đặt câu hỏi.

Trình tạo này có một số giới hạn thực tế cần biết. Chế độ “Không lặp lại” không thể tạo ra nhiều số hơn số lượng có trong phạm vi: 20 giá trị duy nhất trong khoảng từ 1 đến 10 vốn dĩ không tồn tại. Các lần rút thăm đều độc lập và kết quả trước đó không ảnh hưởng đến kết quả sau, vì vậy việc tải lại trang không đặt lại bất kỳ chu kỳ nào — bởi vì ở đây không hề có chu kỳ. Và mặc dù các số được tạo bằng tính ngẫu nhiên an toàn về mặt mật mã học, việc rút thăm ở đây là một lựa chọn công bằng, chứ không phải một dự đoán: các đợt quay số xổ số chính thức sử dụng thiết bị vật lý hoặc được chứng nhận riêng của họ, và bất cứ điều gì được tính toán trong trình duyệt của bạn đều không có liên hệ gì với chúng. Trong phạm vi những giới hạn đó, sự đảm bảo là rất chắc chắn — mỗi số trong phạm vi của bạn có xác suất hoàn toàn bằng nhau, ở mỗi lần rút thăm.

FAQ

Tính ngẫu nhiên này có an toàn về mặt mật mã học không?

Công cụ này sử dụng Web Crypto API (crypto.getRandomValues) của trình duyệt bạn, lấy tính ngẫu nhiên từ nguồn an toàn về mặt mật mã học của hệ điều hành. Không giống như các hàm giả ngẫu nhiên đơn giản, kết quả đầu ra của nó được thiết kế để không thể đoán trước trên thực tế, và rejection sampling đảm bảo mỗi số trong phạm vi có xác suất bằng nhau, không thiên vị những số nhỏ nhất.

Làm thế nào để tạo số ngẫu nhiên trong một phạm vi cụ thể?

Nhập giá trị nhỏ nhất có thể vào trường “Tối thiểu” và giá trị lớn nhất vào trường “Tối đa”, sau đó nhấn “Tạo”. Cả hai ranh giới đều nằm trong kết quả, nên phạm vi từ 1 đến 10 có thể xuất ra cả số 1 lẫn số 10.

Tôi có thể tạo nhiều số ngẫu nhiên cùng một lúc không?

Có. Điền vào trường “Số lượng mục chọn” số lượng bạn cần (tối đa 1000), và trình tạo sẽ chuẩn bị toàn bộ danh sách chỉ trong một cú nhấp. Sau đó bạn có thể sao chép tất cả kết quả vào clipboard bằng nút sao chép, hoặc lưu vào tệp.

Tôi có thể tạo nhiều bộ số cùng một lúc không?

Có. Chuyển “Định dạng kết quả” từ “Dòng mới” sang “Phân cách bằng khoảng trắng” hoặc “Phân cách bằng dấu phẩy” để hiển thị trường “Số lượng bộ”. Điền vào đó số lần rút thăm độc lập bạn cần — ví dụ 20 bộ, mỗi bộ 3 số, cho 20 vòng rút thăm — rồi chọn xem có cho phép trùng lặp giữa các bộ khác nhau hay không.

Tôi có thể sắp xếp các số được tạo không?

Có. Dùng “Thứ tự sắp xếp” để sắp xếp mỗi danh sách theo thứ tự tăng dần hoặc giảm dần, hoặc để nguyên “Không có” để giữ nguyên thứ tự các số khi được tạo ra.

Làm thế nào để tránh các số trùng lặp?

Bật công tắc “Không lặp lại”. Khi được bật, mỗi số trong danh sách được đảm bảo khác nhau — phù hợp cho các buổi rút thăm, giải thưởng, hoặc chia người vào các nhóm. Lưu ý rằng số lượng chọn không được vượt quá kích thước phạm vi: không thể tạo 20 số duy nhất trong khoảng từ 1 đến 10.

Tại sao cùng một số cứ lặp đi lặp lại?

Vì các lần rút thăm độc lập vẫn có thể lặp lại, và đó chính là bản chất thực sự của tính ngẫu nhiên. Mỗi lần rút thăm bỏ qua mọi lần trước đó, nên trong phạm vi từ 1 đến 10, xác suất cùng một số xuất hiện hai lần liên tiếp luôn là 1 trên 10 mỗi lần — đây là điều bình thường, không phải lỗi. Nếu bạn cần một danh sách không lặp lại, hãy bật “Không lặp lại” — cách này chủ động giới hạn việc rút thăm, chứ không phải sửa một lỗi nào cả.

Tại sao một chuỗi ngẫu nhiên trông lại không giống ngẫu nhiên?

Vì tính ngẫu nhiên thực sự là không thể đoán trước, chứ không phải phân bố đều. Mọi người thường mong đợi kết quả ngẫu nhiên sẽ trải đều một cách gọn gàng, nên các cụm, sự lặp lại, và các chuỗi ngắn như 7, 7, 8 khiến người ta cảm thấy như có lỗi, trong khi đó chính xác là những gì xác suất tạo ra. Một chuỗi trông gọn gàng trong mắt con người thường lại chính là chuỗi không thực sự ngẫu nhiên.

Có thể tin tưởng tính ngẫu nhiên được tạo ra trong trình duyệt không?

Có, miễn là nó đến từ Web Crypto API, như ở đây. crypto.getRandomValues cung cấp các giá trị an toàn về mặt mật mã học bằng cách sử dụng nguồn ngẫu nhiên của hệ điều hành, chứ không phải một PRNG JavaScript như Math.random(). Hãy nghi ngờ Math.random() đối với bất cứ điều gì quan trọng: nó có tính tất định (deterministic) và chưa bao giờ được thiết kế để không thể đoán trước.

Số ngẫu nhiên có thể bị đoán trước hoặc bị ảnh hưởng không?

Không thể ở đây. Các giá trị đến từ trình tạo an toàn về mặt mật mã học của hệ điều hành bạn, nên việc quan sát kết quả trước đó không tiết lộ gì về kết quả tiếp theo, và việc rút thăm diễn ra hoàn toàn trên thiết bị của bạn — không có máy chủ nào để can thiệp và không có yêu cầu nào để ai đó chặn lại. Chúng tôi cũng không thể ảnh hưởng đến kết quả của bạn, vì chúng tôi không bao giờ nhìn thấy chúng.

Công cụ này có phù hợp để chọn người thắng quà tặng hoặc rút thăm không?

Phù hợp. Gán cho mỗi người tham gia một số, tạo một kết quả trong phạm vi đó, và người tham gia có số trùng khớp sẽ thắng. Vì nguồn dữ liệu an toàn về mặt mật mã học và việc rút thăm diễn ra hoàn toàn trên thiết bị của bạn, quá trình này dễ giải thích và ghi lại làm bằng chứng nếu có người tham gia đặt câu hỏi về kết quả. Đối với việc chọn số cho một vé số, công cụ này hoạt động như một công cụ lựa chọn ngẫu nhiên, không phải công cụ dự đoán: các đợt quay số xổ số chính thức hoàn toàn tách biệt khỏi công cụ này.

Việc tải lại trang có làm thay đổi tính ngẫu nhiên không?

Không, và cũng không cần thiết. Mỗi lần rút thăm đều đã yêu cầu giá trị mới từ hệ điều hành, nên kết quả vẫn độc lập dù bạn nhấn “Tạo” mười lần liên tiếp hay tải lại trang giữa mỗi lần nhấn. Không có chu kỳ nào cần bắt đầu lại và không có trạng thái nào trở nên lỗi thời — việc tải lại trang chỉ xóa các kết quả đang hiển thị trên màn hình.

Trình tạo này có miễn phí không, và các bạn có lưu số của tôi không?

Công cụ này hoàn toàn miễn phí và không cần đăng ký. Tất cả các số đều được tạo cục bộ trong trình duyệt của bạn và không bao giờ rời khỏi thiết bị của bạn, nên dù có muốn, chúng tôi cũng không thể lưu hoặc xem kết quả của bạn.