Generator Bilangan Acak (kriptografis, mode unik)
Pilih min, maks, dan jumlah untuk menghasilkan bilangan bulat acak yang aman secara kriptografis. Aktifkan 'unik' untuk pengambilan sampel tanpa penggantian (undian, lotre).
Cara kerjanya
Mengapa ini benar-benar acak
Kami menggunakan crypto.getRandomValues โ sumber acak aman kriptografis browser โ alih-alih Math.random(). Output CSPRNG tidak dapat diprediksi dari nilai sebelumnya, yang penting untuk pengambilan lotre, aplikasi terkait perjudian, dan penggunaan di mana 'acak' adalah kebutuhan nyata, bukan hanya 'sembarang'.
Kami juga menggunakan rejection sampling untuk membuat distribusi seragam tepat di seluruh rentang yang dipilih. 'random % range' yang naif memperkenalkan bias ketika rentang tidak membagi 2ยณยฒ secara merata. Rejection sampling membuang nilai yang akan menyebabkan bias dan mencoba lagi, sehingga setiap bilangan dalam rentang Anda memiliki probabilitas yang persis sama.
Unik vs duplikat diizinkan
Mode default: setiap bilangan bersifat independen โ duplikat dapat terjadi. Ini adalah arti 'acak' biasanya dalam penggunaan kasual (melempar dadu, memilih film, pengujian teracak).
Mode unik: pengambilan sampel tanpa penggantian โ setelah bilangan dipilih, tidak dapat dipilih lagi dalam batch yang sama. Berguna untuk: pengambilan lotre (misalnya, 6 angka dari 1-49), undian (mengundi pemenang), penugasan tim, dan situasi 'pilih N dari M' apapun. Memerlukan jumlah โค rentang.
Kasus penggunaan umum
Lotre / undian: 6 bilangan unik dari 1-49, atau apapun yang digunakan undian Anda. Aktifkan 'unik'.
Lemparan dadu: rentang 1-6 (atau 1-20 untuk D20). Biarkan 'unik' mati sehingga setiap lemparan bersifat independen.
Pengambilan sampel acak untuk pengujian: pilih 10 ID pengguna acak dari 1-10000 untuk pemeriksaan spot. Gunakan 'unik' untuk menghindari duplikat.
Simulasi lempar koin: rentang 0-1, beberapa hasil. Hitung kepala/ekor untuk pemeriksaan keadilan (Anda akan melihat ~50/50 pada sampel besar).
Pertanyaan umum
โบApakah ini adil untuk undian atau lotre?
Keacakannya aman secara kriptografis dan tidak bias. Apakah itu secara hukum 'adil' untuk lotre resmi tergantung pada aturan yurisdiksi Anda โ banyak yang memerlukan RNG perangkat keras bersertifikat.
โบApa bedanya dengan Math.random()?
Math.random() menggunakan algoritma yang outputnya dapat diprediksi dari output sebelumnya oleh penyerang. crypto.getRandomValues menggunakan RNG kriptografis tingkat OS yang tidak dapat diprediksi. Untuk keadilan nyata, gunakan ini.
โบBisakah saya mendapatkan bilangan negatif?
Ya. Atur min ke nilai negatif.
โบBerapa rentang maksimumnya?
Dibatasi oleh rentang bilangan bulat aman JavaScript (~2โตยณ), tetapi secara praktis Anda bisa sampai miliaran tanpa masalah. Teknik rejection sampling menangani rentang apapun dengan benar.
โบMengapa 'unik' gagal ketika jumlah > rentang?
Jika Anda memilih 10 bilangan unik dari 1-5, empat tidak ada. Validasi menangkap ini dan meminta Anda memperluas rentang atau mengurangi jumlah.
โบApakah ini bekerja untuk lemparan dadu?
Ya โ atur rentang ke 1-6 (atau apapun dadu Anda) dan matikan 'unik' sehingga setiap lemparan bersifat independen.
โบBisakah saya menyimpan seed dan mereproduksi?
Tidak โ acak aman tidak memiliki seed. Jika Anda memerlukan 'acak' yang dapat direproduksi untuk pengujian, gunakan pustaka PRNG berbasis seed.
โบApakah data dikirim ke mana saja?
Tidak. Generasi sepenuhnya lokal.
Alat terkait
Terakhir diperbarui: