fixmint
VI

Cách chọn người thắng bốc thăm tặng quà công bằng và minh bạch

Tác giả: · · cập nhật 8 tháng 11, 2026 · 4 phút đọc

Để chọn người thắng công bằng, hãy dùng công cụ tạo số ngẫu nhiên an toàn, cho mọi người tham gia cơ hội như nhau và để người khác kiểm tra kết quả sau đó. Phần lớn sự thiếu công bằng trong công cụ chọn ngẫu nhiên đơn giản đến từ hai nguyên nhân: nguồn ngẫu nhiên yếu, hoặc một lỗi số học nhỏ gọi là lệch modulo. Cả hai đều có thể khắc phục. Danh sách người tham gia được công bố và bản ghi lại quá trình bốc thăm là bằng chứng tốt nhất cho thấy không ai đã chọn trước người thắng.

Bốc thăm ngẫu nhiênChọn người thắng công bằngDùng miễn phí

Ngẫu nhiên thật và giả ngẫu nhiên

Nguồn ngẫu nhiên thật lấy tính khó đoán từ một quá trình vật lý, chẳng hạn nhiễu điện tử. Bộ tạo giả ngẫu nhiên là một công thức. Nó bắt đầu từ một giá trị khởi tạo (seed), áp dụng các bước tính toán xác định và tạo ra một dãy số trông như ngẫu nhiên. Dãy số này được quyết định hoàn toàn bởi seed, nên ai biết seed và công thức đều có thể đoán trước mọi con số.

Phần lớn phần mềm dùng bộ tạo giả ngẫu nhiên, và điều đó không sao khi xáo trộn danh sách nhạc hay ngẫu nhiên hóa màn chơi. Với một cuộc bốc thăm có phần thưởng, câu hỏi là liệu có ai đoán trước hoặc tác động được kết quả hay không. Một bộ tạo nhanh nhưng dễ đoán là công cụ sai cho việc này.

Dùng bộ tạo mật mã của trình duyệt

Trong JavaScript, Math.random() là bộ tạo giả ngẫu nhiên nhanh. Tài liệu của nó nói rõ rằng nó không phù hợp cho mật mã, mà bốc thăm trúng thưởng là lựa chọn có liên quan đến bảo mật. Hàm crypto.getRandomValues() của Web Crypto điền một mảng bằng các giá trị lấy từ nguồn ngẫu nhiên mật mã của hệ điều hành. Đây mới là lựa chọn nên dùng. Công cụ chọn ngẫu nhiên dùng hàm này cho mọi lần chọn, kể cả tung đồng xu và xúc xắc. Một công cụ không nói rõ nó dùng gì thì khó tin hơn, nên hãy hỏi trước khi dựa vào nó.

Lệch modulo, qua một ví dụ

Giả sử nguồn của bạn cho ra một byte ngẫu nhiên, tức một số nguyên từ 0 đến 255, và bạn muốn chọn một trong ba người tham gia. Cách dễ nhất là lấy số dư khi chia cho 3. Cách này trông có vẻ công bằng, nhưng 256 không chia hết cho 3.

  • Các giá trị 0, 3, 6 và cứ thế đến 255 có số dư bằng 0. Có 86 giá trị như vậy.
  • Các giá trị có số dư bằng 1 có 85 giá trị, và các giá trị có số dư bằng 2 cũng có 85 giá trị.

Vì vậy, người tham gia số 0 xuất hiện 86 lần trong 256 lần, tức khoảng 33,6%, còn người số 1 và số 2 xuất hiện mỗi người 85 lần, tức khoảng 33,2%. Chênh lệch này nhỏ, nhưng có thật, và nó sẽ lớn hơn khi số người tham gia lớn so với khoảng giá trị của nguồn.

Cách khắc phục là lấy mẫu có loại bỏ (rejection sampling). Lấy một giá trị, nếu nó rơi vào phần dư không đều thì lấy lại. Với ví dụ byte, bạn loại 255 và chỉ nhận các giá trị từ 0 đến 254, vì con số này chia hết cho 3. Với số ngẫu nhiên 32 bit, phần dư chỉ khoảng một giá trị trong 4,3 tỷ, nên độ lệch là không đáng kể với một cuộc bốc thăm tặng quà. Một công cụ cẩn thận vẫn xử lý trường hợp này, vì cùng một lỗi sẽ nghiêm trọng hơn khi khoảng giá trị thu hẹp lại.

Bốc thăm không trùng lặp

Nếu bạn cần nhiều người thắng, việc bốc chỉ số ngẫu nhiên ba lần có thể chọn trúng cùng một người tham gia hai lần. Có hai cách rõ ràng để tránh điều này:

  1. Loại người thắng ra khỏi danh sách, rồi bốc tiếp từ những người còn lại.
  2. Xáo trộn toàn bộ danh sách một lần bằng phương pháp Fisher–Yates, rồi lấy người thắng từ đầu danh sách.

Fisher–Yates duyệt danh sách từ cuối lên, hoán đổi mỗi vị trí với một vị trí được chọn ngẫu nhiên tại hoặc trước nó, và tạo ra mọi thứ tự với xác suất bằng nhau khi các lựa chọn ngẫu nhiên là công bằng. Phương pháp này ngắn gọn, được hiểu rõ và dễ giải thích cho người tham gia. Các tùy chọn Xóa người thắng và Không lặp lại của công cụ chọn ngẫu nhiên đáp ứng cả hai cách.

Làm cho cuộc bốc thăm có thể kiểm tra

Một cuộc bốc thăm công bằng là cuộc mà bất kỳ ai cũng có thể xác minh. Trước khi bốc thăm:

  • Công bố danh sách người tham gia dưới dạng đánh số, cùng với thể lệ về điều kiện tham gia.
  • Công bố dấu vân số SHA-256 của danh sách đó. Bất kỳ công cụ SHA-256 nào cũng tạo được, chẳng hạn công cụ tạo mã hash. Dấu vân số thay đổi hoàn toàn nếu chỉ một người tham gia bị sửa, nên danh sách không thể bị sửa lặng lẽ sau đó. Cách kiểm tra tương tự cũng xác nhận được file tải về; cách kiểm tra checksum SHA-256 của file tải về hướng dẫn từng bước.

Trong và sau khi bốc thăm:

  • Quay màn hình từ lúc bạn bắt đầu dùng công cụ chọn đến khi kết quả hiển thị.
  • Công bố danh sách cuối cùng cùng số thứ tự người thắng, để mọi người có thể tính lại dấu vân số và xác nhận không có gì thay đổi.
  • Nêu rõ người thắng được chọn bằng cách nào, ví dụ "chọn bằng công cụ chạy trên trình duyệt, dùng nguồn ngẫu nhiên mật mã của hệ điều hành".

Thể lệ tặng quà khác nhau giữa các nền tảng, và các cuộc bốc thăm trúng thưởng có thể có yêu cầu pháp lý tùy theo nơi bạn sinh sống. Hãy kiểm tra quy định khuyến mãi của nền tảng và luật địa phương trước khi tổ chức. Đây chỉ là hướng dẫn chung, không phải tư vấn pháp lý. Khi đã sẵn sàng, hãy chọn người thắng bằng công cụ chọn ngẫu nhiên.

Cách làm với fixmint

  1. Chọn Tên, rồi dán danh sách vào ô Tên, mỗi dòng một tên.
  2. Đặt Số người thắng bằng số giải thưởng. Đánh dấu Xóa người thắng khỏi danh sách để không ai thắng hai lần.
  3. Với bốc thăm theo số, chọn Số, đặt Nhỏ nhất và Lớn nhất, rồi đánh dấu Không lặp lại nếu mỗi số chỉ được thắng một lần.
  4. Nhấn Chọn người thắng, với màn hình đã được quay từ đầu.
  5. Công bố danh sách đánh số, dấu vân số SHA-256, người thắng và cách công cụ đã được sử dụng.

Câu trả lời nhanh

Math.random() có dùng được cho bốc thăm tặng quà không?

Nó ổn cho trò chơi và xáo trộn, nhưng không phù hợp cho một cuộc bốc thăm mà mọi người sẽ kiểm tra, vì kết quả của nó có thể đoán trước. Hãy dùng nguồn ngẫu nhiên mật mã.

Sao không lấy một số ngẫu nhiên chia lấy dư cho số người tham gia?

Khi khoảng giá trị không chia hết, phần dư sẽ không đều, nên một số người tham gia có khả năng thắng cao hơn một chút. Lấy mẫu có loại bỏ sẽ khử được lệch này.

Tôi có thể chọn nhiều người thắng từ một cuộc bốc thăm không?

Có. Loại từng người thắng trước khi bốc lượt tiếp theo, hoặc xáo trộn một lần rồi lấy các người đứng đầu. Dù cách nào, cũng không ai có thể thắng hai lần.

Được dịch từ Bản tiếng Anh với sự hỗ trợ của AI.

Bình luận

    Chưa có bình luận nào. Hãy là người đầu tiên.

    Đánh giá của bạn (không bắt buộc)

    Email của bạn không bao giờ được hiển thị hoặc lưu lại.

    Bìa của The Paperoom Game Night KitThe Paperoom Game Night Kit

    Bộ game đêm vui vẻ 52 trang in được: bingo tiệc tùng, câu đố, board game và trận đánh bút chì giấy, kèm sổ kế hoạch và bảng điểm.

    $7.00Mua trên GumroadBản tiếng Anh