Penjana nombor rawak

Jana satu nombor rawak, senarai, atau pelbagai set nombor dalam mana-mana julat — semuanya dijana terus dalam pelayar anda dengan sumber rawak yang selamat secara kriptografi, tidak pernah pada pelayan.

Tekan Jana untuk mengundi
Pilihan

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?

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.

FAQ

Adakah kerawakan ini selamat secara kriptografi?

Alat ini menggunakan Web Crypto API (crypto.getRandomValues) pelayar anda, yang mengambil kerawakan daripada sumber sistem pengendalian yang selamat secara kriptografi. Berbeza daripada fungsi pseudo-rawak mudah, keluarannya direka supaya tidak dapat diramal pada dasarnya, dan rejection sampling memastikan setiap nombor dalam julat mempunyai kebarangkalian yang sama, tanpa condong kepada nombor-nombor terkecil.

Bagaimanakah saya menjana nombor rawak dalam julat tertentu?

Masukkan nilai terkecil yang mungkin dalam medan “Min” dan nilai terbesar dalam medan “Maks”, kemudian tekan “Jana”. Kedua-dua sempadan termasuk dalam hasilnya, jadi julat 1 hingga 10 boleh memaparkan angka 1 mahupun 10.

Bolehkah saya menjana beberapa nombor rawak sekali gus?

Boleh. Isikan medan “Bilangan pilihan” dengan kuantiti yang anda perlukan (sehingga 1000), dan penjana akan menyediakan keseluruhan senarai hanya dengan satu klik. Selepas itu anda boleh menyalin semua hasil ke papan keratan dengan butang salin, atau menyimpannya ke fail.

Bolehkah saya menjana beberapa set nombor sekali gus?

Boleh. Tukar “Format hasil” daripada “Baris baharu” kepada “Dipisahkan dengan ruang” atau “Dipisahkan dengan koma” untuk mendedahkan medan “Bilangan set”. Isikan berapa banyak cabutan bebas yang anda perlukan — contohnya 20 set yang masing-masing mengandungi 3 nombor untuk 20 pusingan cabutan — kemudian tentukan sama ada pendua dibenarkan berulang merentasi set yang berbeza.

Bolehkah saya menyusun nombor yang dijana?

Boleh. Gunakan “Susunan isihan” untuk menyusun setiap senarai secara menaik atau menurun, atau biarkan pada “Tiada” supaya nombor kekal dalam susunan semasa dijana.

Bagaimanakah saya mengelakkan nombor pendua?

Hidupkan suis “Tanpa ulangan”. Apabila diaktifkan, setiap nombor dalam senarai dijamin berbeza — sesuai untuk cabutan bertuah, cabutan hadiah, atau membahagikan orang kepada kumpulan. Ingat bahawa bilangan tidak boleh melebihi saiz julat: 20 nombor unik antara 1 dan 10 tidak dapat dijana.

Mengapakah nombor yang sama terus berulang?

Kerana cabutan bebas memang boleh berulang, dan itulah rupa sebenar kerawakan. Setiap cabutan mengabaikan semua cabutan sebelumnya, jadi dalam julat 1 hingga 10, kebarangkalian nombor yang sama muncul dua kali berturut-turut sentiasa 1 daripada 10 — perkara biasa, bukan ralat. Jika anda memerlukan senarai tanpa pengulangan, hidupkan “Tanpa ulangan” — ini mengehadkan cabutan secara sengaja, bukan membaiki kecacatan.

Mengapakah jujukan rawak tidak kelihatan rawak?

Kerana kerawakan sejati tidak dapat diramal, bukan tersebar sama rata. Orang menjangkakan keluaran rawak akan tersebar kemas, jadi kelompok, pengulangan, dan jujukan pendek seperti 7, 7, 8 terasa seperti kesilapan, sedangkan itulah tepat yang dihasilkan oleh kebarangkalian. Jujukan yang kelihatan kemas kepada manusia biasanya adalah jujukan yang sebenarnya tidak rawak.

Bolehkah kerawakan yang dijana dalam pelayar dipercayai?

Boleh, selagi sumbernya ialah Web Crypto API, seperti di sini. crypto.getRandomValues menyediakan nilai yang selamat secara kriptografi menggunakan kerawakan sistem pengendalian pelayar anda, bukan PRNG JavaScript seperti Math.random(). Math.random() tidak sesuai untuk apa-apa yang penting: sifatnya deterministik dan tidak pernah direka untuk tidak dapat diramal.

Bolehkah nombor rawak diramal atau dipengaruhi?

Tidak di sini. Nilai-nilai itu datang daripada sumber rawak yang selamat secara kriptografi yang disediakan oleh sistem pengendalian anda, jadi memerhati hasil sebelumnya tidak mendedahkan apa-apa tentang hasil seterusnya, dan cabutan berlaku sepenuhnya pada peranti anda — tiada pelayan untuk digodam, tiada permintaan untuk dipintas sesiapa. Kami juga tidak dapat mempengaruhi hasil anda, kerana kami tidak pernah melihatnya.

Adakah ia sesuai untuk memilih pemenang hadiah percuma atau cabutan bertuah?

Sesuai. Berikan setiap peserta satu nombor, jana satu hasil dalam julat tersebut, dan peserta yang nombornya sepadan akan menang. Kerana sumbernya selamat secara kriptografi dan cabutan berlaku sepenuhnya pada peranti anda, prosesnya mudah dijelaskan dan didokumenkan jika mana-mana peserta mempersoalkan hasilnya. Untuk memilih nombor kemasukan loteri, alat ini berfungsi sebagai alat pemilihan rawak, bukan alat ramalan: cabutan loteri rasmi sama sekali berasingan daripada alat ini.

Adakah menyegarkan semula halaman mengubah kerawakan?

Tidak, dan memang tidak perlu. Setiap cabutan sudah meminta nilai baharu daripada sistem pengendalian, jadi hasilnya kekal bebas sama ada anda menekan “Jana” sepuluh kali atau memuat semula halaman antara setiap tekanan. Tiada kitaran yang perlu dimulakan semula dan tiada keadaan yang menjadi luput — menyegarkan semula hanya mengosongkan hasil yang dipaparkan pada skrin.

Adakah penjana ini percuma, dan adakah anda menyimpan nombor saya?

Alat ini sepenuhnya percuma tanpa perlu pendaftaran. Semua nombor dijana secara setempat dalam pelayar anda dan tidak pernah meninggalkan peranti anda, jadi kami tidak dapat menyimpan atau melihat hasil anda walaupun kami mahu.