RNG 乱数生成

3 文字でいうところの RNG。いますぐ 1 つ、乱数が欲しいとき用。

—
オプション

RNG は random number generator の略で、プログラミングの文脈では擬似乱数のことを指すことが多いです。一度シードした決定論的なアルゴリズムですね。この区別は重要で、シード付きの PRNG はゲームには向きますが、セキュリティが絡む用途には向きません。

このページはブラウザの暗号学的な乱数源を使います。「乱数をくれ」に対して、背後にシード状態を持たない正直な答えです。コードで書く方法を知りたい場合は、下の開発者向けの注意書きに 2 つの定番の失敗を書いてあります。

使い方

  1. 範囲を設定します。そのまま 1-100 でもかまいません。
  2. 何度でも生成できます。
  3. コードに組み込む場合は、他のサイトのスニペットを貼る前に下の注意書きを読んでください。

ほぼすべての RNG スニペットにある 2 つの誤り

1 つ目は Math.floor(Math.random() * n) + 1 です。正しく見えますが、暗号学的でない PRNG を使っており、範囲が大きいと乗算で精度が落ちます。2 つ目は crypto.getRandomValues(buf) の結果に % n を適用する書き方で、n が 2^32 を割り切らないときに modulo bias が入り、先頭側の値がわずかに出やすくなります。

正しい型は rejection sampling です。32 ビットの値を引き、末尾の不完全な区間に入ったら捨て、残った値だけを n で割ります。ときどき引き直す代わりに、偏りが完全に消えます。Python の secrets.randbelow(n) はすでにこの実装で、JavaScript では自分で書く必要があります。

確認日:2026-10-21。このツールはすべてブラウザ内で動作します。サーバーもアカウントもなく、生成した内容は保存されません。

よくある質問

RNG は何の略ですか?

random number generator です。暗号学的なものは CSPRNG と呼び、シード付きの式ではなく OS のエントロピープールから引きます。

これは真の乱数ですか?

いいえ。真の乱数には物理的なエントロピー源が必要です。これは OS がシードする暗号学的擬似乱数で、ブラウザやサーバーが TLS で使っているものと同じ種類です。

JavaScript で乱数を得るには?

上に書いたとおり、crypto.getRandomValues と rejection sampling の組み合わせです。セキュリティと無関係な用途なら Math.random() でもかまいませんが、トークンやパスワード、予測されると困る値には使えません。

関連ツール

乱数のその他のツール。