Cách Quayso.app tạo số ngẫu nhiên và kiểm chứng tính công bằng
Quayso.app tạo số bằng crypto.getRandomValues(), loại bỏ phần dư không đều rồi ánh xạ giá trị hợp lệ vào khoảng cần chọn; kết quả được quyết định trước hiệu ứng.
Điểm chính
- Mỗi mẫu ban đầu là số nguyên 32 bit, thuộc 4.294.967.296 giá trị có thể có.
- Lấy mẫu từ chối loại bỏ lệch phần dư thay vì dùng trực tiếp phép
x % n. - Kiểm định gồm 300 lần chạy và tổng cộng 300 triệu lượt sinh số.
- Một p-value dưới 0,05 không tự chứng minh có lỗi; cần xem tỉ lệ qua nhiều lần thử.
Cách tạo số ngẫu nhiên công bằng của Quayso.app gồm những bước nào?
- Lấy entropy từ hệ điều hành. Quayso.app gọi
crypto.getRandomValues(), bộ sinh số ngẫu nhiên an toàn mật mã của trình duyệt. - Tạo số nguyên 32 bit. Mỗi lần lấy mẫu cho một trong 4.294.967.296 giá trị, từ 0 đến 4.294.967.295.
- Loại phần dư không chia đều. Công cụ bỏ các mẫu từ ngưỡng là bội số lớn nhất của độ rộng khoảng trở lên rồi lấy mẫu mới.
- Ánh xạ vào tập hợp hợp lệ. Sau khi trừ các đoạn bị loại, mỗi số còn lại nhận cùng một số lượng giá trị đầu vào.
- Chốt kết quả trước hiệu ứng. Giao diện máy chỉ trình diễn kết quả đã được quyết định.
Vì sao Quayso.app dùng crypto.getRandomValues thay cho Math.random?
crypto.getRandomValues() là CSPRNG của trình duyệt và nhận entropy từ hệ điều hành. Quayso.app không dùng Math.random(), vì hàm này là bộ sinh giả ngẫu nhiên nhanh nhưng không được thiết kế để an toàn mật mã.
Ví dụ, V8 dùng thuật toán xorshift128+ cho Math.random(); trạng thái có thể bị suy đoán nếu biết đủ nhiều giá trị đầu ra. CSPRNG phù hợp hơn khi kết quả cần khó dự đoán từ các lượt trước; đây là khác biệt cốt lõi giữa một app quay số ngẫu nhiên dùng CSPRNG và một công cụ dùng Math.random().
Lệch phần dư là gì và Quayso.app loại bỏ nó thế nào?
Lệch phần dư xảy ra khi 4.294.967.296 giá trị đầu vào không chia hết cho độ rộng khoảng nhưng chương trình vẫn dùng trực tiếp x % n. Khi đó, một nhóm số nhận thêm một giá trị đầu vào và có xác suất cao hơn.
Với khoảng 1–10, Quayso.app chỉ chấp nhận các mẫu nhỏ hơn 4.294.967.290. Sáu giá trị còn lại bị bỏ và sinh lại, vì vậy cả 10 kết quả đều được ánh xạ từ đúng 429.496.729 mẫu.
| Độ rộng khoảng | Tỉ lệ số bị ưu tiên | Mức lệch của các số đó | Tỉ lệ lượt phải lấy lại khi dùng lấy mẫu từ chối |
|---|---|---|---|
| 10 giá trị | 60% | dễ ra hơn 0,00000023% | 0,00000014% |
| 100 giá trị | 96% | dễ ra hơn 0,0000023% | 0,0000022% |
| 1.000 giá trị | 29,6% | dễ ra hơn 0,000023% | 0,0000069% |
| 1.000.000 giá trị | 96,7% | dễ ra hơn 0,023% | 0,023% |
| 1.000.000.000 giá trị | 29,5% | dễ ra hơn 25% | 6,9% |
| 1.999.999.999 giá trị | 14,7% | dễ ra hơn 50% | 6,9% |
Lệch do phép lấy phần dư gần như không đáng kể với độ rộng không quá 1.000, nhưng tăng mạnh ở khoảng lớn. Với độ rộng 1 tỉ, 29,5% số có thể dễ xuất hiện hơn 25% nếu triển khai sai; lấy mẫu từ chối loại bỏ chênh lệch này.
Chi phí lớn nhất trong dữ liệu đã tính là khoảng 6,9% mẫu phải lấy lại. Quayso.app chấp nhận việc lấy lại mẫu để giữ xác suất bằng nhau trên các khoảng gần 2 tỉ giá trị.
Quayso.app chọn nhiều số không trùng bằng cách nào?
Khi bật “Không lặp”, Quayso.app dùng Fisher–Yates rút gọn nếu khoảng có tối đa 100.000 giá trị. Mỗi bước chọn một phần tử trong tập còn lại, tương đương rút thăm không hoàn lại.
Với khoảng lớn hơn 100.000 giá trị, công cụ tiếp tục chọn ngẫu nhiên nhưng bỏ qua số đã xuất hiện. Cả hai cách đều bảo đảm một số không được trả về hai lần trong cùng lượt.
Số loại trừ và số đã trúng được xử lý ra sao?
Quayso.app trừ các đoạn loại trừ khỏi khoảng trước khi chọn số. Cú pháp 4, 13, 20-25 loại tổng cộng 8 số; mỗi số còn lại vẫn có xác suất bằng nhau.
Chế độ quay loại dần áp dụng cùng nguyên tắc cho các số đã trúng. Công cụ tính trực tiếp trên các đoạn số thay vì liệt kê từng phần tử, nên vẫn xử lý được khoảng gần 2 tỉ giá trị.
Kiểm chứng tính ngẫu nhiên của Quayso.app cho kết quả gì?
Bộ kiểm định ngày 27/09/2026 dùng Node v26.8.1 Web Crypto và cùng mã nguồn sinh số của trang. Ba cấu hình được thử 100 lần, mỗi lần 1.000.000 lượt, tương đương 300 triệu lượt quay.
| Khoảng thử | Số giá trị | Lần chạy × lượt | p trung vị | Lần p < 0,05 (kỳ vọng) | Lần p < 0,01 (kỳ vọng) | Số ra ngoài hoặc bị loại trừ |
|---|---|---|---|---|---|---|
| 1–10 | 10 | 100 × 1.000.000 | 0,504 | 5 (≈5) | 1 (≈1) | 0 |
| 1–100 | 100 | 100 × 1.000.000 | 0,502 | 3 (≈5) | 0 (≈1) | 0 |
| 1–100 trừ 4, 13, 20-25 | 92 | 100 × 1.000.000 | 0,623 | 3 (≈5) | 0 (≈1) | 0 |
Trong 300 lần chạy, 11 lần có p-value dưới 0,05 và 1 lần dưới 0,01; mức kỳ vọng tương ứng xấp xỉ 15 và 3 lần. Không có kết quả ngoài khoảng hoặc thuộc danh sách loại trừ.
Với một bộ sinh đúng, p-value phân bố đều từ 0 đến 1; khoảng 5% lần thử có p-value dưới 0,05 là hiện tượng bình thường. Việc kiểm chứng cần đánh giá phân bố của nhiều p-value, không kết luận từ một lần chạy riêng lẻ.
Một triệu lượt quay 1–10 lệch bao nhiêu so với kỳ vọng?
Trong một lần chạy 1.000.000 lượt cho khoảng 1–10, kỳ vọng là 100.000 lần cho mỗi số. Chênh lệch lớn nhất ghi nhận là 329 lượt, tương đương 0,33% so với kỳ vọng.
Biểu đồ thể hiện cả chênh lệch dương và âm quanh mốc 100.000. Dao động quan sát được không đồng nghĩa với thiên lệch; phép thử chi bình phương qua 100 lần mới là cơ sở để xem tỉ lệ bất thường.
Phép kiểm định có chứng minh ngẫu nhiên tuyệt đối không?
Không. Kiểm định thống kê chỉ cho biết dữ liệu có dấu hiệu lệch khỏi phân phối đều hay không; nó không chứng minh tuyệt đối mọi lượt quay tương lai đều không thể có lỗi.
Kết quả kiểm định cần được đọc cùng cách triển khai: CSPRNG cung cấp nguồn khó dự đoán, còn lấy mẫu từ chối loại bỏ lệch phần dư. Hai lớp này giải quyết hai vấn đề khác nhau.
Quayso.app có những giới hạn minh bạch nào?
- Mỗi số có tối đa 9 chữ số và mỗi lượt trả về tối đa 1.000 kết quả.
- Quayso.app không ngăn người tổ chức bỏ một kết quả rồi quay lại; sự kiện cần kiểm chứng nên quay trực tiếp hoặc livestream.
- Kết quả không lưu trên máy chủ, nên Quayso.app không thể tra cứu lượt quay của thiết bị khác.
- Hiệu ứng Giờ Vàng, Lồng Xuân, Bảng Ga và Nixie Lab không tác động đến số đã được chọn.