Random số ngẫu nhiên online — Bốc thăm số từ min đến max
Sinh số ngẫu nhiên trong khoảng [min, max] với số lượng tùy chọn. Hỗ trợ không trùng lặp và sắp xếp tăng/giảm/ngẫu nhiên.
Công thức & ví dụ
Công cụ sinh số ngẫu nhiên trong khoảng [min; max] bằng thuật toán cơ bản:
Số ngẫu nhiên = ⌊min + random() × (max − min + 1)⌋
Trong đó random() trả về số thực ngẫu nhiên trong [0; 1) — đây là hàm chuẩn của hầu hết ngôn ngữ lập trình (Math.random trong JavaScript, random.random() trong Python, rand() trong PHP).
Đặc tính:
- Phân phối đều: Mỗi số trong khoảng [min; max] có xác suất xuất hiện như nhau = 1/(max − min + 1).
- Bao gồm min và max: Phân phối khép kín cả 2 đầu, đúng như bốc thăm tự nhiên.
- Độc lập: Mỗi lần sinh là 1 sự kiện độc lập với các lần trước.
Ví dụ: Sinh 1 số trong [1; 100]. Xác suất ra mỗi số là 1/100 = 1%. Trung bình sau 100 lần sinh, mỗi số xuất hiện khoảng 1 lần (theo quy luật số lớn).
Sinh nhiều số không trùng nhau: Dùng thuật toán Fisher-Yates: tạo mảng [min, min+1, …, max], xáo trộn, lấy n phần tử đầu. Đây là cách công cụ bốc thăm trúng thưởng hoạt động.
Pseudo-random vs True-random: Math.random() là pseudo (giả ngẫu nhiên, có thể tái tạo nếu biết seed). True random cần nguồn vật lý (nhiễu nhiệt, lượng tử) — không cần thiết cho mục đích phổ thông.
Hướng dẫn sử dụng
- Nhập giá trị nhỏ nhất (min) và lớn nhất (max). Cả 2 phải là số nguyên, min ≤ max.
- Số lượng cần sinh: 1, 5, 10, 20… tuỳ nhu cầu.
- Tuỳ chọn nâng cao:
- Không trùng: đảm bảo các số sinh ra duy nhất trong 1 lượt (yêu cầu n ≤ max − min + 1).
- Sắp xếp: tăng dần / giảm dần / giữ nguyên thứ tự sinh.
- Bấm “Sinh số”. Kết quả hiện ngay phía dưới.
- Bấm “Copy” để dán kết quả vào Excel hoặc gửi qua tin nhắn.
- Trường hợp dùng: bốc thăm trúng thưởng, chia ca trực, lấy mẫu khảo sát, tạo dữ liệu test, chọn ngẫu nhiên câu hỏi trong đề kiểm tra.
Tìm hiểu thêm
Sinh số ngẫu nhiên là tác vụ cơ bản trong xác suất, thống kê, lập trình và đời sống. Mặc dù nhìn đơn giản, ngẫu nhiên thực sự là khái niệm khó — và việc sinh số ngẫu nhiên trên máy tính có nhiều tinh tế đáng biết.
Ứng dụng phổ biến:
- Bốc thăm trúng thưởng: Mọi minigame Facebook, Instagram đều dùng random để chọn người thắng từ danh sách người tham gia.
- Lấy mẫu khảo sát: Chọn ngẫu nhiên 100 trong 10 000 sinh viên để khảo sát chất lượng giảng dạy — đảm bảo tính đại diện thống kê.
- Game: Random chỉ số nhân vật, drop loot, tỉ lệ chí mạng.
- Dạy học: Minh hoạ quy luật số lớn, phân phối đều trong xác suất thống kê.
- Mật mã (cần true random): Sinh khoá AES, salt cho mật khẩu. KHÔNG dùng Math.random cho mục đích này — phải dùng crypto.getRandomValues().
Pseudo-random reproducible: Tất cả thuật toán random máy tính đều dùng “seed” — giá trị khởi tạo. Nếu biết seed, có thể tái tạo y nguyên chuỗi random. Đây vừa là điểm yếu (kẻ tấn công đoán được kết quả) vừa là điểm mạnh (test reproducible trong nghiên cứu khoa học).
True random: Random.org dùng nhiễu khí quyển từ radio để sinh random thật. NIST chuẩn hoá phương pháp sử dụng nhiễu lượng tử. Chỉ cần thiết cho ứng dụng bảo mật cao hoặc xổ số cấp quốc gia.
Câu hỏi thường gặp
Số sinh ra có thật ngẫu nhiên không?
Là pseudo-random (giả ngẫu nhiên). Đủ ngẫu nhiên cho bốc thăm, chia ca, dạy học, game. Không đủ cho mật mã/bảo mật cao — phải dùng crypto.getRandomValues() của Web Crypto API thay thế Math.random(). Pseudo-random có thể tái tạo nếu biết seed nội bộ.
Min và max có bao gồm trong kết quả không?
Có. Công cụ dùng khoảng đóng [min; max] — cả 2 đầu đều có thể xuất hiện. Ví dụ min=1, max=10 thì 1 và 10 đều là kết quả khả dĩ với xác suất bằng nhau 1/10.
Sinh nhiều số có thể trùng nhau không?
Mặc định có thể trùng (sampling with replacement). Nếu cần không trùng (sampling without replacement) như bốc thăm trúng thưởng, bật tuỳ chọn "Không trùng". Lưu ý: số lượng cần sinh phải ≤ (max − min + 1), không thể lấy 100 số khác nhau trong khoảng [1; 50].
Có cách nào sinh số theo phân phối khác (chuẩn, Poisson)?
Phiên bản hiện tại chỉ phân phối đều (uniform). Để sinh số theo phân phối chuẩn (normal/Gaussian), cần thuật toán Box-Muller hoặc Marsaglia polar — không có trong công cụ. Bạn dùng Excel (=NORM.INV) hoặc Python (numpy.random.normal) cho nhu cầu này.
Bốc thăm trúng thưởng dùng được công cụ này không?
Được, nhưng nên kiểm tra danh sách người tham gia rõ ràng và minh bạch trước khi bốc. Cách dùng: đánh số người tham gia 1, 2, … n; nhập min=1, max=n, bấm sinh số. Nên livestream quá trình bốc để đảm bảo công khai minh bạch.
