๐ŸŽฒ

Random Number Generator

Generate random integers, decimals, coin flips, dice rolls, or shuffle a list using cryptographic randomness.

MATH

Generator angka acak untuk integer, desimal, dadu, koin, dan shuffle list. Memakai randomness kriptografi (Web Crypto).

Enam mode: integer range, decimal range, list shuffle, coin flip (weighted), dice roller (d4-d100 + custom), dan random pick. Rejection sampling untuk menghindari modulo bias.

Disklaimer: Cocok untuk kebutuhan random sehari-hari. Untuk kriptografi production gunakan library yang diaudit. .

Generator Angka Acak (Random Number Generator)

Hasilkan angka acak, lempar koin, lempar dadu, atau acak daftar dengan kualitas kriptografis (Web Crypto API). Pilih mode di bawah, atur parameter, lalu tekan Generate.

Hasilkan beberapa bilangan bulat dalam rentang [min, max] (inklusif). Bisa atur unik (tanpa duplikat) dan urutkan menaik.

Tentang Generator Angka Acak

Pseudo-random vs Kriptografis

Math.random() di JavaScript adalah pseudo-random: deterministik, cepat, tapi prediktif. Web Crypto (crypto.getRandomValues) memberi angka acak kualitas kriptografis - aman untuk token, password, undian.

Mengapa pakai Crypto?

Untuk undian, lotere, atau apapun yang bernilai uang/keadilan: pakai Crypto. Untuk simulasi game atau visual: Math.random cukup.

Fisher-Yates Shuffle

Algoritma standar untuk acak daftar: dari belakang ke depan, tukar elemen ke-i dengan elemen acak dari [0, i]. Hasil: setiap permutasi punya peluang sama (1/n!).

Modulo Bias

Cara salah: Math.floor(Math.random() * range). Untuk crypto integers, modulo bias bisa muncul jika range bukan pembagi dari 2^32. Kami pakai rejection sampling untuk menghindarinya.

Use case

Pengundian giveaway, pilih nomor lotere, simulasi dadu/koin untuk game, sampling acak data, password sederhana, ice-breaker games, eksperimen statistika.

Untuk hadiah giveaway resmi atau lotere komersial, dokumentasikan seed dan saksi independen. Untuk kebutuhan keamanan kritis (kunci enkripsi, sesi auth), gunakan library kriptografi khusus, bukan kalkulator web.

Informasi kalkulator

Cara menggunakan kalkulator ini

  1. Pilih mode: Integer Range, Decimal Range, List Shuffle, Coin Flip, Dice Roller, atau Random Pick.
  2. Untuk Integer/Decimal Range, isi batas bawah dan batas atas (inklusif untuk integer). Contoh: 1 sampai 100.
  3. Tentukan jumlah angka yang ingin di-generate (1-1000) dan opsi unik tanpa duplikat jika dibutuhkan.
  4. Untuk Dice Roller, pilih jenis dadu (d4, d6, d8, d10, d12, d20, d100) atau buat custom (misal 3d6 + 2).
  5. Klik Generate. Hasil dapat di-copy ke clipboard atau di-regenerate tanpa kehilangan setting.
  6. Tips: untuk pengundian berhadiah, simpan screenshot hasil sebagai bukti; randomness berasal dari Web Crypto API browser, bukan Math.random().

Cryptographic Random dengan Rejection Sampling

raw = crypto.getRandomValues(Uint32Array) ; threshold = floor(2^32 / range) * range ; if raw < threshold: hasil = min + (raw mod range)
  • range = max - min + 1 (untuk integer inklusif)
  • raw = 32-bit unsigned integer acak dari CSPRNG
  • threshold = batas tertinggi raw yang habis dibagi range, untuk menghindari modulo bias
  • Jika raw >= threshold, ambil sample baru (rejection sampling)

Web Crypto API memakai CSPRNG OS-level (getrandom di Linux, CryptGenRandom di Windows). Modulo langsung tanpa rejection sampling menyebabkan bias jika 2^32 tidak habis dibagi range.

Contoh: Generate 5 angka unik dari 1 sampai 49 untuk simulasi lotere

Diketahui:
  • Mode: Integer Range
  • Min: 1, Max: 49
  • Jumlah: 5, Unik: Ya
Langkah:
  1. range = 49 - 1 + 1 = 49.
  2. threshold = floor(4294967296 / 49) * 49 = 87652393 * 49 = 4294967257.
  3. Ambil raw pertama, misal 1234567890; karena 1234567890 < 4294967257, diterima.
  4. hasil = 1 + (1234567890 mod 49) = 1 + 17 = 18.
  5. Ulangi sampai dapat 5 angka berbeda; jika duplikat, di-skip dan ambil sample baru.

Hasil: Contoh keluaran: 7, 18, 23, 31, 42.

Pertanyaan yang sering diajukan

Apa beda Math.random() dengan Web Crypto?
Math.random() memakai PRNG (xorshift atau Mersenne Twister) yang deterministik dari seed internal dan tidak cocok untuk keperluan keamanan atau audit. Web Crypto (crypto.getRandomValues) memakai CSPRNG dari OS, melewati tes statistik NIST SP 800-22 dan aman untuk lotere, undian, atau token rahasia. Kalkulator ini hanya memakai Web Crypto.
Mengapa perlu rejection sampling?
Operasi modulo langsung (raw mod range) memberikan probabilitas berbeda untuk tiap nilai jika 2^32 tidak habis dibagi range. Misal range 7: angka 0-5 muncul lebih sering daripada 6. Rejection sampling membuang sample di zona tidak rata sehingga distribusi benar-benar uniform.
Apakah hasil sama jika halaman di-refresh?
Tidak. Setiap generate menarik bytes baru dari CSPRNG OS yang state-nya terus berubah, sehingga praktis tidak mungkin reproduksi hasil yang sama. Tidak ada seed yang bisa Anda set untuk reproduktibilitas; jika butuh reproduktibilitas, simpan output.
Bisakah dipakai untuk undian berhadiah resmi?
Secara matematis randomness-nya cukup, tetapi untuk undian berhadiah komersial di Indonesia diperlukan izin penyelenggaraan undian dari Kementerian Sosial sesuai Peraturan Menteri Sosial No. 14 Tahun 2012 dan harus disaksikan notaris serta pihak Kemensos. Hasil generator ini bisa jadi salah satu bukti, bukan pengganti prosedur legal.
Berapa maksimum angka dalam satu generate?
Kalkulator membatasi 1.000 angka per panggilan untuk menjaga responsivitas UI. Untuk dataset lebih besar, lakukan generate berulang atau gunakan library di luar browser. Range integer didukung hingga Number.MAX_SAFE_INTEGER (2^53 - 1).

Terakhir diperbarui: 11 Mei 2026