Random Number Generator

Random Number Generator

Free client-side developer and designer tool.

数値表記フォーマット切替
総生成サンプル数0
標本平均値0.00
カイ二乗検定 P値p = 1
エントロピー密度0 bits
乱数生成パラメータ設定
暗号学的乱数 (CSPRNG)
最小値 (Min)
最大値 (Max)
10
重複なし(非復元抽出)一度抽出された数値は除外され、重複のないユニークな抽選を行います
小数点以下の桁数整数の場合は0、小数の場合は必要な精度桁数を指定します
生成乱数シーケンス一覧(0 観測サンプル数)
技術リファレンス・アーキテクチャガイド

乱数生成&真性RNGピッカー — 技術リファレンス

Web Crypto暗号学的ハードウェアエントロピーおよびシード付き擬似乱数に対応した高性能乱数生成エンジン。整数・小数・正規ガウス分布・重複なし宝くじ抽選を、リアルタイムのカイ二乗適合度検定や統計テレメトリとともに即座に生成・エクスポートできます。

乱数生成&真性RNGピッカー — 技術リファレンス — クライアントサイド完全ローカル実行アーキテクチャ図
乱数生成&真性RNGピッカー — 技術リファレンス — クライアントサイド完全ローカル実行アーキテクチャ図

主要パラメータと設定項目

数値範囲境界(最小値・最大値)整数 | 浮動小数点数

生成されるすべての数値を包含する閉区間 [最小値, 最大値] を指定します。丸め誤差のない64ビット安全な整数(最大 ±9,007,199,254,740,991 / Number.MAX_SAFE_INTEGER)および高精度小数に対応しています。

初期値: 1〜100
生成サンプル数(個数 N)整数

1回の実行バッチで生成・抽出する乱数の総数量を指定します。UIのメインスレッドを停止させることなく、1件(単一当選者)から最大10,000件の統計データまでミリ秒単位で瞬時に処理します。

初期値: 1
乱数生成エンジン・エントロピー源CSPRNG(暗号学的擬似乱数生成器) | Mulberry32 PRNG

OSやハードウェアの物理的ノイズから生成される予測不可能な暗号学的エントロピー(window.crypto)と、シード値によって完全な再現性・監査性を保証する決定論的擬似乱数(Mulberry32 PRNG)のいずれかを選択します。

初期値: CSPRNG(Web Crypto)
確率分布アルゴリズム一様分布 | ガウス正規分布 | 指数分布

数値の出現確率密度を制御します。一様分布(Uniform)はすべての候補値に完全等確率を割り当て、ガウス正規分布(Gaussian)はボックス=ミュラー変換により釣鐘型のベルカーブを生成し、指数分布(Exponential)はポアソン過程における事象の到着間隔をモデル化します。

初期値: 一様分布(Uniform)
サンプリング抽出モード(重複制御)重複を許可(復元抽出) | 重複なし(非復元抽出)

重複なし(非復元抽出)を有効にすると、Fisher-Yatesシャッフルアルゴリズムに基づき同一数値の重複出現を完全に防止します。このモードでは鳩の巣原理により「生成個数 ≦ 最大値 - 最小値 + 1」を満たす必要があります。

初期値: 重複を許可(復元抽出)

現場のベストプラクティス・実践Tips

剰余バイアス(Modulo Bias)と単純な余り算による偏りの原因

初心者の実装で多用される「random % range」のような単純な剰余算や「Math.floor(rng() * range)」による範囲縮小は、真のランダム性を損ないます。生成元のエントロピー範囲(例: 32ビット整数の4,294,967,296通り)が対象範囲の整数倍で割り切れない場合、余りの分だけ小さい数値の出現確率が不当に高くなる「剰余バイアス」が発生します。本ツールでは、32ビット符号なし整数の端数領域を破棄する「棄却サンプリング(Rejection Sampling)」を徹底し、全数値に対して数学的に完全な等確率を保証しています。

Math.random() の予測脆弱性と暗号学的ハードウェアエントロピー(CSPRNG)

V8(Google Chrome)をはじめとするモダンブラウザの Math.random() は、セキュリティではなく描画速度を最優先した「xorshift128+」等の擬似乱数アルゴリズムを採用しています。内部状態がわずか128ビットしかないため、連続する2〜3個の64ビット浮動小数点出力を観測するだけで、Z3 SMTソルバー等のツールを用いて内部状態を完全に逆算・復元し、以降に生成されるすべての数値を100%予測可能です。金銭が絡む懸賞抽選、トークン発行、暗号鍵生成、厳正なビンゴ大会などでは、OSのハードウェアノイズを収集するCSPRNG(Web Crypto API)を必ずご利用ください。

完全な正規ガウス分布を実現するボックス=ミュラー法(Box-Muller Transform)

滑らかな釣鐘型の正規分布(ベルカーブ)を生成するため、開区間 (0, 1) の独立した2つの一様乱数 U1, U2 を標準正規偏差へ変換する「ボックス=ミュラー法(極座標変換)」を採用しています: Z0 = sqrt(-2 * ln(U1)) * cos(2 * pi * U2)。本ツールは倍精度浮動小数点(Double Precision)でこの変換を厳密に計算し、「平均 μ + Z0 * 標準偏差 σ」でスケーリングします。中心極限定理を利用した簡易的な「サイコロ12個の加算近似」とは異なり、裾野(テール部分)の打ち切り歪みが発生せず、学術・統計的に正確な極値サンプリングが可能です。

よくある落とし穴とトラブルシューティング

⚠️重複なし生成時のエラー: 生成個数が指定範囲内の総候補数を超過しています

「重複なし(非復元抽出)」モードが有効な場合、数学上の「鳩の巣原理(ディリクレの部屋割り論法)」により、抽出個数 N が候補総数(最大値 - 最小値 + 1)を超えることはできません。例えば「1〜50の範囲から重複なしで60個抽出する」ことは論理的に不可能です。対処法として、[最小値, 最大値] の範囲を広げるか、生成個数 N を減らすか、または抽出モードを「重複を許可(復元抽出)」に切り替えてください。

⚠️小規模サンプル時にカイ二乗適合度検定の分散が大きくなり、P値が極端な値を示す

ピアソンのカイ二乗検定(Pearson's Chi-Square Test)が漸近的にカイ二乗分布に従うのは、各度数ビンの期待度数が概ね「E_i ≧ 5」を満たす場合に限られます。例えばサンプル数 N = 20 を10個のビンに分割した場合、ビンあたりの期待度数は E_i = 2 となり、ポアソン分散の揺らぎによって偶然極端なP値が算出されやすくなります。統計的に意味のある均一度検証を行うには、最低でも500〜1,000サンプル以上を生成して検定を実行してください。

よくある質問 (FAQ)

重複のない完全なランダム数値を生成するにはどのような仕組みを使っていますか?▼

重複のない乱数(非復元抽出)を生成するため、本ツールは「Fisher-Yates(フィッシャー・イェーツ)シャッフルアルゴリズム」を採用しています。最小値から最大値までの配列をメモリ上に展開し、暗号学的に安全なランダムインデックスを選択して現在の要素と順次スワップ(交換)していくことで、計算量 O(N) の線形時間で N 個の一意な数値を抽出します。すべての順列・組み合わせが数学的に完全等確率で選ばれるため、ビンゴ抽選やプレゼント交換、競技のトーナメント抽選に最も公平な選出法です。

暗号学的擬似乱数生成器(CSPRNG)と通常の擬似乱数(PRNG)の違いは何ですか?▼

通常の擬似乱数生成器(PRNG)は、初期シード値(種)をもとに数学的な漸化式を用いて数値を順次算出します。そのため、シード値が既知であるか出力パターンが特定されると、過去および未来の数列全体が完全に予測可能(決定論的)になってしまいます。一方、暗号学的擬似乱数生成器(CSPRNG: window.crypto.getRandomValues 等)は、OSのハードウェア割り込みや熱雑音などの物理的エントロピーを取り込んで乱数を生成します。いかなる多項式時間アルゴリズムを用いても次のビットを予測できない「次ビットテスト(Next-Bit Test)」をクリアしており、高セキュリティな抽選や暗号通信に適しています。

正規分布(ガウス分布)に従う乱数はどのように生成されますか?▼

独立した2つの標準一様乱数に対し「ボックス=ミュラー法」を適用し、平均0・分散1の標準正規分布に従う確率変数へと変換します。得られた値に対して「X = μ + Z * σ」(μ: 目標平均値、σ: 標準偏差)の線形スケーリングを行うことで、任意のベルカーブ分布を生成できます。これにより、製品の製造公差や測定誤差、知能指数(IQ)の分布、金融資産の価格変動シミュレーション、健康診断の生体指標モデルなど、自然界や社会科学の多様な現象を忠実に再現できます。

カイ二乗検定によって乱数が均一であることをどのように検証していますか?▼

ピアソンのカイ二乗適合度検定は、生成範囲 [最小値, 最大値] を k 個の等幅ビン(区間)に分割し、統計量「χ² = Σ((観測度数 - 期待度数)² / 期待度数)」(期待度数 = 総生成数 N / k)を算出します。この χ² 値を自由度 k - 1 のカイ二乗分布と照合して P値(有意確率)を導出します。P値が 0.05 から 0.95 の範囲内に収まっている場合、観測された出現頻度のばらつきは作為的な偏りではなく、純粋な自然のランダム性によるものであると統計学的に証明されます。

なぜ JavaScript の Math.random() は暗号処理や抽選・懸賞に使ってはいけないのですか?▼

標準ブラウザの Math.random() は暗号学的に安全ではなく、またシード固定の標準規格も存在しません。内部で使用されているアルゴリズム(Chrome/V8のxorshift128+やSafari/WebKitのPCGなど)は、内部状態のサイズが極めて小さく設計されています。そのため、連続して出力された少数の乱数を観測するだけでアルゴリズムの内部状態が完全に逆算されてしまい、次に当選する番号やパスワードトークンが第三者に事前に見破られるリスクがあります。公正な抽選会や機密情報に関わる用途では、必ず Web Cryptography API(window.crypto)準拠のエンジンを使用する必要があります。

関連開発者ツール

全ツール一覧 →