Perlukan cara pantas dan adil untuk mendapatkan nombor rawak? Penjana nombor rawak dalam talian percuma ini menjana satu nombor — atau keseluruhan senarai nombor — dalam mana-mana julat yang anda pilih, daripada julat mudah 1 hingga 10 sehingga julat yang meliputi berbilion. Tetapkan nilai minimum dan maksimum dalam “Min” dan “Maks”, pilih berapa banyak nombor yang anda perlukan dengan “Bilangan pilihan”, kemudian tekan “Jana”. Kedua-dua sempadan disertakan dalam hasil, jadi julat 1 hingga 10 boleh menghasilkan kedua-dua 1 dan 10.
Setiap hasil dijana terus dalam pelayar anda menggunakan Web Crypto API (crypto.getRandomValues) — yang menyediakan nilai rawak yang selamat secara kriptografi daripada sumber rawak sistem pengendalian pelayar anda. Tiada apa-apa dihantar ke pelayan atau direkodkan pada pelayan, dan kami tidak pernah melihat nombor anda. Penjanaan berlaku serta-merta, secara peribadi, dan terus berfungsi walaupun pada sambungan perlahan selepas halaman selesai dimuatkan.
Pilihan-pilihan ini direka untuk situasi sebenar apabila orang benar-benar memerlukan nombor rawak. Hidupkan “Tanpa ulangan” supaya tiada nombor muncul dua kali — tetapan yang anda perlukan untuk cabutan bertuah, cabutan seperti loteri, atau membahagikan orang kepada kumpulan tanpa pengulangan. Perlukan 20 pemenang daripada 500 peserta? Tetapkan “Min” kepada 1 dan “Maks” kepada 500, hidupkan “Tanpa ulangan”, tetapkan “Bilangan pilihan” kepada 20, kemudian tekan “Jana”. “Susunan isihan” menyusun hasil secara menaik atau menurun, dan satu butang menyalin semua hasil sekali gus. Menukar “Format hasil” daripada “Baris baharu” kepada “Dipisahkan dengan ruang” atau “Dipisahkan dengan koma” akan mendedahkan “Bilangan set”: beberapa cabutan bebas sekali gus — dua puluh set yang masing-masing mengandungi 3 nombor untuk dua puluh pusingan cabutan — dan “Benarkan pendua antara set” menentukan sama ada nombor yang sama boleh muncul dalam lebih daripada satu set.
Bagaimanakah nilai rawak ini sebenarnya dijana? Pelayar anda menyediakan nilai rawak yang selamat secara kriptografi melalui Web Crypto API, bukan melalui PRNG JavaScript seperti Math.random(). Apabila anda menekan “Jana”, halaman meminta nilai rawak dengan crypto.getRandomValues dan menggunakannya untuk menjana nombor dalam julat yang anda pilih. Sumber rawak asas ini disediakan oleh pelayar dan sistem pengendalian, jadi halaman tidak perlu menyimpan nilai seed atau jujukan pseudo-rawak sendiri.
Proses memetakan nilai mentah ke dalam julat anda sering menjadi ruang di mana penjana secara senyap melakukan kesilapan, dan ini wajar dibincangkan dalam satu perenggan tersendiri. Mengambil nilai modulo saiz julat kelihatan seperti pendekatan paling mudah, tetapi itulah juga yang berat sebelah: melainkan julat terbahagi rata tepat kepada 2^32, nombor-nombor terkecil akan sedikit lebih kerap muncul berbanding yang lain. Kecacatan ini dipanggil modulo bias, dan sifatnya boleh diukur, bukan sekadar teori. Penjana ini sebaliknya membuang mana-mana nilai yang melebihi gandaan tepat terbesar julat tersebut dan mengambil nilai baharu semula — teknik ini dipanggil rejection sampling. Ini memerlukan beberapa percubaan tambahan, tetapi hasilnya ialah jaminan yang tepat: setiap nombor antara “Min” dan “Maks” mempunyai kebarangkalian yang benar-benar sama, bukan sekadar hampir sama.
Apakah yang menjadikan sesuatu nombor benar-benar rawak? Sesuatu nombor cukup rawak apabila hasil sebelumnya tidak memberitahu apa-apa tentang hasil seterusnya — dan pada dasarnya terdapat tiga tahap untuk itu. Fungsi pseudo-rawak biasa seperti Math.random() menjalankan algoritma deterministik: sesiapa yang mengetahui keadaan dalamannya boleh menghasilkan semula keseluruhan jujukannya — ini cukup baik untuk mengacak slaid pembentangan, tetapi tidak sesuai untuk apa-apa yang hasilnya tidak boleh diramal. Penjana yang selamat secara kriptografi — tahap yang digunakan alat ini — juga merupakan satu algoritma, tetapi direka untuk menghasilkan nilai yang tidak dapat diramal menggunakan sumber rawak sistem yang selamat, dan dibina supaya mengetahui hasil sebelumnya tidak mendedahkan apa-apa tentang nilai seterusnya. Kerawakan fizikal, daripada sumber seperti hingar atmosfera atau reputan radioaktif, merupakan kategori yang berbeza daripada kedua-duanya, walaupun untuk mencabut nombor dalam sesuatu julat, perbezaan praktikalnya hilang. Inilah sebabnya pelayar menyediakan crypto API berasingan berbanding memperbaiki Math.random(): kedua-duanya menyelesaikan masalah yang berbeza, dan hanya salah satu daripadanya selamat apabila hasilnya penting kepada seseorang.
Jujukan yang benar-benar rawak tidak direka untuk kelihatan rawak kepada manusia. Cabut sepuluh nombor antara 1 dan 10, dan anda akan kerap melihat pengulangan, pasangan hampir seperti 7, 7, 8, atau jujukan pendek nombor besar berturut-turut — dan semua itu adalah lumrah. Kerawakan sejati tidak dapat diramal, bukan tersebar sama rata: setiap cabutan adalah bebas, nombor-nombor terdahulu langsung tidak mempengaruhi nombor seterusnya, dan tiada nombor pernah mendapat “giliran”. Naluri yang berkeras sebaliknya dipanggil gambler's fallacy, dan naluri yang sama inilah yang menjadikan manusia sendiri penjana nombor rawak yang lemah — apabila diminta mencipta jujukan rawak, kita mengelakkan pengulangan dan menyebarkan nilai jauh lebih sekata berbanding yang dilakukan oleh kebarangkalian sebenar. Hasil yang kelihatan kemas secara mencurigakan adalah cap jari manusia; kerawakan tulen sebaliknya menghasilkan kelompok.
Mengapa pilih penjana nombor rawak ini?
- Penjanaan hanya dalam pelayar: nombor dijana pada peranti anda dan tidak pernah dihantar ke mana-mana
- Kerawakan Web Crypto API: selamat secara kriptografi, bukan Math.random()
- Tiada modulo bias: rejection sampling memastikan setiap nombor dalam julat mempunyai kebarangkalian yang sama
- Mana-mana julat: daripada 1 hingga 10 sehingga nilai yang meliputi berbilion, kedua-dua sempadan disertakan
- Mod “Tanpa ulangan”: jana senarai tanpa pengulangan untuk cabutan dan pembahagian kumpulan
- Pelbagai set: beberapa cabutan bebas dalam satu klik
- Isihan dan format hasil: menaik atau menurun, baris baharu, ruang, atau koma
- Sejarah dan simpan ke fail: simpan rekod cabutan yang mungkin perlu anda jelaskan
- Tanpa had dan percuma: tiada pendaftaran, tiada had penggunaan, tiada data dihantar ke pelayan kami
Nombor rawak muncul di lebih banyak tempat berbanding jangkaan kebanyakan orang. Guru memanggil pelajar tanpa berat sebelah. Penstrim dan pasukan pemasaran mencabut pemenang hadiah percuma dan cabutan bertuah di hadapan penonton yang perlu mempercayai hasilnya. Pemain menggantikan dadu yang hilang atau menentukan siapa bermain dahulu, dan kejohanan mencabut susunan permulaan. Penyelidik memilih sampel rawak supaya penemuan mereka terpakai lebih luas daripada sekadar mereka yang menjadi sukarelawan. Pembangun menjana data ujian, menetapkan nilai seed untuk simulasi, dan memilih pengecam semasa QA. Persamaan bagi semua ini ialah proses pemilihan rawak yang boleh dijelaskan selepas itu: kerana cabutan menggunakan kerawakan kriptografi dan berlaku sepenuhnya pada peranti anda, anda boleh menunjukkan bagaimana hasil itu dijana jika sesiapa mempersoalkannya.
Penjana ini mempunyai beberapa batasan nyata perlu diketahui. Mod “Tanpa ulangan” tidak dapat menjana lebih banyak nombor daripada yang terdapat dalam julat: 20 nilai unik antara 1 dan 10 memang tidak wujud. Cabutan adalah bebas dan hasil sebelumnya tidak mempengaruhi hasil seterusnya, jadi menyegarkan semula halaman tidak menetapkan semula sebarang kitaran — kerana memang tiada kitaran di sini. Dan walaupun nombor-nombor itu selamat secara kriptografi, cabutan di sini adalah pilihan yang adil, bukan ramalan: cabutan loteri rasmi menggunakan peralatan fizikal atau bertauliah mereka sendiri, dan apa-apa yang dikira dalam pelayar anda tiada kaitan dengannya. Dalam had-had tersebut, jaminannya amat kukuh — setiap nombor dalam julat anda mempunyai kebarangkalian yang benar-benar sama, pada setiap cabutan.