Công cụ chọn ngẫu nhiên

Dán bất kỳ danh sách nào và để công cụ này lựa chọn một cách công bằng. Mỗi đợt rút thăm đều chạy ngay trên trình duyệt của bạn với độ bảo mật mật mã học, vì vậy danh sách của bạn sẽ không bao giờ rời khỏi thiết bị.

Nhấn Tạo để quay số
Dấu phân cách được tự động phát hiện, hoặc bạn có thể thiết lập bên dưới.
Tùy chọn nâng cao

Bạn cần bốc thăm tìm người trúng thưởng, gọi một học sinh lên bảng, hay quyết định xem ai sẽ rửa bát? Công cụ chọn ngẫu nhiên trực tuyến miễn phí này sẽ lựa chọn một cách công bằng từ bất kỳ danh sách nào bạn dán vào. Hãy đặt các mục của bạn vào hộp “Mục” — mỗi mục trên một dòng, hoặc cách nhau bằng dấu phẩy — thiết lập số lượng bạn muốn qua “Số lượng mục chọn”, và nhấn “Tạo”. Một danh sách cần ít nhất hai mục và có thể chứa tối đa 1000 mục, mỗi mục dài tối đa 200 ký tự.

Mỗi lượt chọn được thực hiện trực tiếp trên trình duyệt của bạn bằng Web Crypto API (crypto.getRandomValues), cung cấp các giá trị ngẫu nhiên an toàn về mặt mật mã học từ hệ thống cốt lõi của trình duyệt. Danh sách của bạn không bao giờ bị gửi đến máy chủ, không bị ghi nhật ký và chúng tôi cũng không bao giờ nhìn thấy — điều này quan trọng ở đây hơn hầu hết các công cụ khác, bởi vì người dùng thường dán vào danh sách khách hàng, sổ điểm lớp, hoặc tên của đồng nghiệp. Nút “Tải từ tập tin” cũng giữ nguyên cam kết đó: trình duyệt của bạn tự đọc tập tin và điền vào hộp văn bản ngay trên máy, không có bất kỳ dữ liệu nào bị tải lên mạng.

Các tùy chọn được thiết kế cho những định dạng danh sách mà mọi người thực sự sử dụng. “Dấu phân cách mục” được đặt sẵn ở chế độ “Tự động phát hiện”, tự đọc các dấu ngắt dòng và dấu phẩy rồi nhận diện xem danh sách của bạn dùng loại nào, do đó một danh sách sao chép từ bảng tính, tin nhắn trò chuyện hoặc tài liệu sẽ hoạt động ngay mà không cần định dạng lại. Hãy khóa nó ở “Dòng mới”, “Dấu phẩy” hoặc “Khoảng trắng” khi dữ liệu của bạn lẫn lộn nhiều định dạng — và lưu ý rằng “Khoảng trắng” luôn là một lựa chọn chủ đích chứ không bao giờ tự động, vì các mục như họ và tên người chứa khoảng trắng bên trong, nếu mặc định chia tách theo khoảng trắng thì sẽ làm hỏng danh sách nhiều hơn là giúp ích. “Số lượng mục chọn” quyết định số mục được bốc thăm, từ 1 đến 100. Bạn muốn chọn ba người trúng giải từ 200 người tham gia? Dán danh sách người tham gia, đặt “Số lượng mục chọn” thành 3, và nhấn “Tạo”. Có hai điều khiển chỉ áp dụng khi số lượng từ 2 trở lên và sẽ bị mờ đi cho đến lúc đó: “Không lặp lại”, quyết định xem một mục có thể được bốc trúng hai lần hay không, và “Định dạng kết quả”, thiết lập cách phân cách các kết quả được chọn — “Mỗi mục trên một dòng mới”, “Phân cách bằng khoảng trắng”, hoặc “Phân cách bằng dấu phẩy”.

Một hàng nút bên trong hộp “Mục” thực hiện các thao tác chỉnh sửa mà bạn thường phải làm ở ứng dụng khác. “Tải từ tập tin” lấy danh sách trực tiếp từ một tập tin văn bản thuần túy hoặc CSV. “Xáo trộn” thay đổi thứ tự các mục trong hộp, “Sắp xếp” xếp chúng theo bảng chữ cái với các con số được sắp xếp tự nhiên và cú nhấp thứ hai sẽ đảo ngược lại, còn “Xóa” sẽ làm trống hộp. “Điền dữ liệu mẫu” đưa vào một danh sách ví dụ ngắn để bạn có thể thử nghiệm công cụ chỉ với một cú nhấp chuột, trong khi “Mở rộng” mở bung hộp văn bản để hiển thị toàn bộ một danh sách dài và “Thu gọn” xếp nó trở lại kích thước mặc định. Dưới phần kết quả, “Sao chép tất cả” đưa từng kết quả được chọn vào bộ nhớ tạm của bạn, “Lưu vào tệp” xuất chúng ra thành một tập tin, và “Lịch sử” lưu giữ 10 lần rút thăm gần nhất ngay trong trình duyệt của bạn, vì vậy một kết quả cũ chỉ cách bạn một cú nhấp chuột.

Lượt chọn thực sự được thực hiện như thế nào? Khi bạn nhấn “Tạo”, trang web yêu cầu trình duyệt cung cấp các giá trị ngẫu nhiên thông qua crypto.getRandomValues và dùng chúng để chọn các vị trí trong danh sách của bạn, thay vì đi qua một hàm giả ngẫu nhiên của JavaScript như Math.random(). Chuyển đổi một giá trị 32-bit thô thành một vị trí chính là chỗ mà các công cụ chọn ngẫu nhiên thường âm thầm làm sai: lấy giá trị modulo cho chiều dài danh sách là cách tiếp cận rõ ràng nhất nhưng lại thiên lệch, bởi vì trừ khi 2^32 chia hết cho chiều dài của danh sách, các mục ở gần đầu danh sách sẽ xuất hiện thường xuyên hơn một chút so với phần còn lại. Lỗi này được gọi là modulo bias, và nó hoàn toàn có thể đo lường được chứ không chỉ nằm trên lý thuyết. Công cụ này thay vào đó sẽ loại bỏ bất kỳ giá trị nào vượt quá bội số chính xác lớn nhất của chiều dài danh sách và bốc thăm lại — một kỹ thuật được gọi là rejection sampling. Nó tốn thêm vài lần bốc phụ nhưng đổi lại mang đến một sự đảm bảo chính xác tuyệt đối thay vì chỉ xấp xỉ. Vị trí trong danh sách không làm thay đổi điều gì: mục đầu tiên và mục cuối cùng có xác suất hoàn toàn bằng nhau trong mọi đợt rút thăm.

Tùy chọn “Không lặp lại” phân tách hai loại bốc thăm thực sự khác biệt, và thống kê học có tên gọi riêng cho từng loại. Khi được bật, công cụ sẽ xáo trộn một bản sao danh sách của bạn bằng thuật toán Fisher-Yates và lấy các mục từ trên xuống — y hệt như việc bốc thăm từ một chiếc hộp mà không bỏ lại vào trong, vì vậy không ai bị bốc trúng hai lần và mọi nhóm có cùng kích thước đó đều có cơ hội ngang nhau. Đó là lấy mẫu không hoàn lại (sampling without replacement), và nó là thứ bạn cần cho việc tìm người trúng giải, chia đội, và thứ tự lượt chơi. Khi tắt tùy chọn này, mỗi lượt chọn được thực hiện độc lập từ toàn bộ danh sách, do đó cùng một mục có thể xuất hiện nhiều hơn một lần — lấy mẫu có hoàn lại (sampling with replacement), chính là thứ bạn cần khi mọi người vẫn đủ điều kiện tham gia ở mỗi vòng, như trong các đợt rút thăm lặp lại hoặc lấy mẫu thống kê nhanh. Không có chế độ nào công bằng hơn chế độ kia; chúng chỉ đơn giản là trả lời cho những câu hỏi khác nhau.

Một đợt rút thăm công bằng vốn không hề trông có vẻ công bằng. Rút năm tên từ mười tên và bạn sẽ thường xuyên thấy hai kết quả nằm cạnh nhau trong danh sách gốc, hoặc cùng một tên xuất hiện hai lần liên tiếp khi cho phép lặp lại, và tất cả những điều đó đều hoàn toàn bình thường. Mỗi đợt rút thăm đều độc lập: những kết quả trước đó không có bất kỳ ảnh hưởng nào đến những kết quả sau, và không có ai tự nhiên trở nên “tới lượt” phải thắng cả. Bản năng luôn khăng khăng điều ngược lại chính là gambler's fallacy, và nó cũng là bản năng khiến chúng ta rất tệ trong việc tự mình lựa chọn ngẫu nhiên — khi được yêu cầu chọn ngẫu nhiên, chúng ta thường tránh mục đầu và mục cuối, tránh lặp lại một cái tên, và phân bổ các lựa chọn của mình đồng đều hơn rất nhiều so với những gì sự ngẫu nhiên thực sự làm. Một kết quả trông gọn gàng và hoàn hảo một cách đáng ngờ chính là dấu vân tay của con người; sự ngẫu nhiên thực sự luôn tạo ra những cụm tụ tập.

Tại sao nên chọn công cụ rút thăm ngẫu nhiên này?

Việc chọn ngẫu nhiên xuất hiện ở bất cứ nơi nào một quyết định cần phải đứng vững trước những nghi ngờ. Giáo viên gọi học sinh phát biểu mà không thiên vị và chia lớp thành các nhóm làm dự án. Các streamer và nhân viên tiếp thị bốc thăm người trúng giải trước một lượng khán giả cần phải tin vào kết quả đó. Người quản lý phân chia các nhiệm vụ mà không ai tự nguyện nhận, và các đội quyết định thứ tự thuyết trình hoặc ai sẽ trực ban. Các nhà nghiên cứu lấy một mẫu hồ sơ ngẫu nhiên để kiểm toán. Các gia đình kết thúc cuộc tranh luận về việc nên xem phim gì, và một nhóm bạn đang đói bụng chọn quán lẩu để ăn. Điểm chung của chúng là một sự lựa chọn mà bất kỳ ai cũng có thể giải thích rõ ràng sau đó: đợt rút thăm sử dụng tính ngẫu nhiên mật mã học, nó diễn ra hoàn toàn trên thiết bị của bạn, và “Lịch sử” lưu giữ kết quả phòng trường hợp có ai đó thắc mắc về nó sau này.

Có một vài giới hạn thực tế đáng để biết. Công cụ này không thể chọn ra nhiều mục khác biệt hơn số lượng danh sách của bạn có — ba người trúng giải cần ít nhất ba cái tên — và nó dừng lại ở 1000 mục, mỗi mục 200 ký tự, với tối đa 100 kết quả trong một đợt rút thăm. “Xáo trộn” và “Sắp xếp” hoạt động theo từng dòng, vì vậy một danh sách phân cách bằng dấu phẩy được dán trên một dòng duy nhất sẽ chỉ được xáo trộn khi nó đã trở thành mỗi mục trên một dòng; và cả hai nút này đều chỉ sắp xếp lại hộp văn bản chứ không phải thay đổi cơ chế rút thăm, vốn dĩ luôn công bằng bất kể các mục của bạn nằm ở thứ tự nào. Mỗi mục cũng mang trọng số hoàn toàn bằng nhau theo thiết kế, vì vậy một đợt rút thăm mà một tên cần được tính gấp đôi thì tên đó phải được liệt kê hai lần trong danh sách. Nằm trong những giới hạn đó, sự đảm bảo là vô cùng vững chắc — mọi mục trong danh sách của bạn đều có cơ hội hoàn toàn bằng nhau, trong mọi đợt rút thăm.

FAQ

Làm thế nào để tôi chọn một tên ngẫu nhiên từ danh sách?

Dán các tên vào hộp “Mục” — mỗi tên trên một dòng, hoặc cách nhau bằng dấu phẩy hoặc khoảng trắng — để “Số lượng mục chọn” là 1 và nhấn “Tạo”. Một cái tên sẽ được rút ra ngay lập tức. Đối với nhiều tên cùng lúc, hãy tăng “Số lượng mục chọn” lên con số bạn cần.

Sự lựa chọn có thực sự công bằng không?

Có. Mỗi lượt chọn đều sử dụng Web Crypto API của trình duyệt (crypto.getRandomValues) cùng với kỹ thuật rejection sampling, loại bỏ hoàn toàn lỗi modulo bias mà một cách triển khai thông thường sẽ mắc phải. Mỗi mục có xác suất chính xác như nhau bất kể vị trí của nó trong danh sách, và việc rút nhiều mục khác biệt sử dụng thuật toán xáo trộn Fisher-Yates, do đó mọi nhóm có cùng kích thước đó cũng đều có khả năng xảy ra như nhau.

Danh sách của tôi có bị tải lên máy chủ của bạn không?

Không. Toàn bộ quá trình rút thăm chạy cục bộ trong trình duyệt của bạn: danh sách, các kết quả được chọn và lịch sử không bao giờ rời khỏi thiết bị của bạn, vì vậy các tên tuổi, email hay bất kỳ danh sách riêng tư nào đều an toàn khi dán vào đây. Nút “Tải từ tập tin” cũng hoàn toàn cục bộ — chính trình duyệt của bạn tự đọc tập tin đó và không có gì bị tải lên mạng.

Tôi có thể dán một danh sách phân cách bằng dấu phẩy hoặc khoảng trắng thay vì mỗi dòng một mục không?

Có. “Dấu phân cách mục” được đặt là “Tự động phát hiện”, tự nó phân biệt được dấu ngắt dòng và dấu phẩy, nên một danh sách được sao chép từ bảng tính, tin nhắn hoặc tài liệu sẽ hoạt động ngay lập tức. Một danh sách phân cách bằng khoảng trắng cần thêm một bước — đặt “Dấu phân cách mục” thành “Khoảng trắng” — bởi vì các mục như họ và tên chứa khoảng trắng bên trong chúng và không bao giờ tự động bị tách ra dựa trên khoảng trắng. Hãy khóa “Dấu phân cách mục” thành “Dòng mới” hoặc “Dấu phẩy” nếu dữ liệu của bạn lẫn lộn các định dạng.

Công tắc “Không lặp lại” có tác dụng gì?

Khi bật “Không lặp lại”, mỗi mục được chọn sẽ khác nhau — giống như bốc thăm từ một chiếc hộp mà không bỏ lại vào trong, đây là điều bạn muốn khi tìm người trúng giải hoặc chia đội. Khi tắt, cùng một mục có thể được chọn nhiều hơn một lần, điều mà các nhà thống kê gọi là sampling with replacement (lấy mẫu có hoàn lại).

Tại sao các tùy chọn “Không lặp lại” và “Định dạng kết quả” lại bị mờ đi?

Bởi vì cả hai chỉ áp dụng khi bạn bốc thăm nhiều hơn một mục, giống như dòng gợi ý bên cạnh đã nói: “Chỉ áp dụng khi Số lượng mục chọn lớn hơn 1”. Hãy tăng “Số lượng mục chọn” lên 2 hoặc cao hơn và cả hai sẽ khả dụng; ở số lượng là 1 thì không có gì để lặp lại và cũng không có gì để phân cách.

Tùy chọn “Định dạng kết quả” dùng để làm gì?

Nó thiết lập cách thức nhiều kết quả được hiển thị và sao chép: “Mỗi mục trên một dòng mới”, “Phân cách bằng khoảng trắng” cho một tin nhắn trò chuyện nhanh, hoặc “Phân cách bằng dấu phẩy” để dán vào một bảng tính hoặc tập lệnh. Nó sẽ khả dụng khi “Số lượng mục chọn” từ 2 trở lên.

Các nút “Xáo trộn” và “Sắp xếp” làm nhiệm vụ gì?

“Xáo trộn” thay đổi thứ tự ngẫu nhiên của các mục bên trong hộp “Mục”, và “Sắp xếp” xếp chúng theo bảng chữ cái với các con số được sắp xếp tự nhiên — nhấp lần nữa sẽ đảo ngược thứ tự đó. Cả hai đều chỉ thay đổi cách danh sách của bạn được viết ra, chứ không thay đổi cách hoạt động của việc rút thăm: công cụ chọn này luôn công bằng bất kể các mục nằm ở thứ tự nào.

Danh sách có thể chứa bao nhiêu mục, và tôi có thể chọn bao nhiêu mục cùng lúc?

Danh sách chứa từ 2 đến 1000 mục, mỗi mục tối đa 200 ký tự, và một lần rút thăm trả về tối đa 100 kết quả. Các dòng trống và khoảng trắng xung quanh đều bị bỏ qua, do đó một danh sách dán từ bảng tính hoặc tài liệu sẽ hoạt động đúng như nguyên bản.

Nó có phù hợp để bốc thăm người trúng thưởng giveaway không?

Có, và đó là một trong những ứng dụng phổ biến nhất. Dán danh sách người tham gia, đặt “Số lượng mục chọn” bằng số lượng giải thưởng, luôn bật “Không lặp lại” để không ai trúng giải hai lần, và nhấn “Tạo”. Bởi vì quá trình rút thăm sử dụng tính ngẫu nhiên an toàn mật mã học và chạy hoàn toàn trên thiết bị của bạn, toàn bộ quy trình này rất dễ giải thích, và “Lịch sử” lưu lại kết quả nếu có người tham gia thắc mắc về nó sau này.

Tôi có thể sử dụng nó để chia mọi người thành các đội không?

Có. Đặt “Số lượng mục chọn” bằng quy mô của đội đầu tiên và nhấn “Tạo” — các tên được chọn chính là đội một. Xóa chúng khỏi danh sách và lặp lại cho đội tiếp theo. Hãy luôn bật “Không lặp lại” để không ai rơi vào hai đội cùng một lúc.

Tại sao cùng một tên lại xuất hiện hai lần liên tiếp?

Bởi vì các đợt bốc thăm độc lập có thể lặp lại, và đó chính là diện mạo thực sự của sự ngẫu nhiên. Mỗi đợt rút thăm đều hoàn toàn bỏ qua mọi đợt trước đó, vì vậy trong một danh sách mười tên, một cái tên xuất hiện hai lần liên tiếp sẽ có xác suất là 1 trên 10 ở mỗi lần — đây là chuyện bình thường, không phải lỗi. Hãy bật “Không lặp lại” nếu bạn cần mỗi lựa chọn trong cùng một đợt rút thăm phải khác biệt nhau.

Công cụ này có nhớ các lựa chọn của tôi không, và nó có miễn phí không?

“Lịch sử” lưu giữ 10 lần rút thăm gần nhất trong chính trình duyệt của bạn, vì vậy bạn có thể khôi phục, sao chép hoặc xóa một kết quả cũ, và xóa sạch toàn bộ bất cứ khi nào bạn muốn. Công cụ này hoàn toàn miễn phí mà không cần đăng ký, và vì không có gì được truyền đi, chúng tôi không thể xem hay lưu trữ các lượt chọn của bạn ngay cả khi chúng tôi muốn.