乱数生成ツール - 範囲・小数点指定可能なオンライン乱数
無料オンライン乱数生成ツール。範囲と小数点以下桁数を指定して乱数を生成できます。一括生成、重複可否設定付き。crypto.getRandomValues() 使用で安全な乱数を提供。
精度乱数ジェネレーターとは?
精度乱数ジェネレーターは、指定された範囲内で小数点以下の桁数を正確に制御して乱数を作成します。単純なMath.random()がフォーマットされていない0から1の値しか提供しないのとは異なり、当ツールでは正確な境界(最小/最大値)の設定、小数精度(0〜15桁)の制御、重複の許可/不許可、バッチ結果の生成が可能です——すべてブラウザの暗号的に安全なcrypto.getRandomValues() APIを使用して、予測可能な疑似乱数シーケンスではなく真のランダム性を提供します。
乱数の生成方法
範囲を設定
最小値と最大値を入力して範囲を定義します。整数、小数、負の数を使用できます。
精度を選択
スライダーまたは入力で小数点以下桁数(0〜15)を設定します。0にすると整数のみの乱数、より高い値では小数精度が得られます。
数と重複を設定
生成する数(1〜100)と、結果で重複値を許可するかどうかを選択します。
生成してコピー
「生成」をクリックして乱数を生成します。コピーボタンで個別の結果またはセット全体をクリップボードにコピーします。
乱数ジェネレーターの一般的な使用例
ソフトウェアテスト
ユニットテスト、統合テスト、ファジング用のランダムテストデータを生成。アプリケーションの期待される入力形式に合わせて精度を制御します。
統計サンプリング
統計分析、A/Bテスト、モンテカルロシミュレーション用に、設定可能な精度で母集団範囲からランダムサンプルを作成します。
ゲームと宝くじ
ランダムなサイコロの目、カード引き、宝くじ番号を生成。ユニークモードで抽選に重複結果がないようにします。
教育と指導
特定の難易度と精度要件に合わせた数字で、ランダムな数学問題、練習用データセット、教室演習を作成します。
乱数生成の仕組み
コンピュータはアルゴリズムだけで真の乱数を生成することはできません——外部のランダム性の源(エントロピー)が必要です。当ツールはWeb Crypto APIのcrypto.getRandomValues()メソッドを使用し、OSの暗号エントロピープールにアクセスします。このプールは、マウスの動き、キーボードのタイミング、ディスクI/O、専用ハードウェア乱数生成器(Intel CPUのRDRAND)などのハードウェアソースからランダム性を収集します。
CSPRNG(暗号的に安全な疑似乱数生成器)とは?
CSPRNGは暗号用途に適した乱数生成器です。2つの重要な特性を満たす必要があります:(1) 次ビットテスト——先行するすべてのビットがわかっていても、攻撃者が次のビットを50%より良い確率で予測できないこと;(2) 状態漏洩耐性——内部状態が部分的に明らかになっても、以前に生成された数値を再構築できないこと。ブラウザのcrypto.getRandomValues()はOSのCSPRNG実装(Linuxでは/dev/urandom、WindowsではCryptGenRandom)を使用します。
Crypto.getRandomValues() vs Math.random()
| 特徴 | crypto.getRandomValues() | Math.random() |
|---|---|---|
| セキュリティレベル | 暗号グレード | 非暗号グレード |
| エントロピー源 | OSエントロピープール(ハードウェア+イベント) | 決定論的アルゴリズム(xorshift128+) |
| 予測可能性 | 予測不可能 | 状態予測の可能性あり |
| 推奨用途 | パスワード、トークン、ギャンブル、セキュリティ | アニメーション、ゲーム、重要でないランダム |
当ツールはgetRandomValues()からの生の32ビット符号なし整数を、均一スケーリングを使用して指定された範囲にマッピングします:result = min + (randomUint32 / 0xFFFFFFFF) × (max - min)。これにより範囲全体での均一分布が保証され、モジュロバイアスがなく、その後四捨五入によって小数精度が適用されます。
コードで乱数を生成する方法
異なるプログラミング言語で精度制御付きの安全な乱数を生成する方法を学びます。
JavaScript
// Secure random number with precision
function randomInRange(min, max, decimals) {
const range = max - min;
const rand = crypto.getRandomValues(new Uint32Array(1))[0];
const scaled = min + (rand / 0xFFFFFFFF) * range;
return +scaled.toFixed(decimals);
}Python
import random
import secrets
# Secure random float with precision
def random_in_range(min_val, max_val, decimals):
rand = secrets.randbelow(2**53) / (2**53)
result = min_val + rand * (max_val - min_val)
return round(result, decimals)Java
import java.security.SecureRandom;
public static double randomInRange(
double min, double max, int decimals) {
SecureRandom sr = new SecureRandom();
double rand = sr.nextDouble();
double result = min + rand * (max - min);
return Math.round(result * Math.pow(10, decimals))
/ Math.pow(10, decimals);
}乱数に関するよくある問題
同じ数が複数回出る
「重複を許可」が有効な場合、特に範囲が小さく精度が低い場合、同一の結果が出るのは正常で予想されることです。一意の結果を得るには、ユニークモードを有効にしてください。ただし、範囲には要求された数の一意の数値を生成するのに十分な可能値が含まれている必要があります。
一意の数値が多すぎるリクエスト
精度N、範囲R = max - minの場合、最大で floor(R × 10^N) + 1 個の一意の値が利用可能です。例えば、範囲1-10で小数点以下0桁の場合、10個の一意の整数しかありません。利用可能な値より多くの一意の数値をリクエストすると、ツールはエラーを表示します。
数値がランダムに見えない(クラスター)
真のランダム性はしばしば人間が「ランダムでない」と感じるパターン——クラスター、連続、近似重複——を生み出します。これはクラスタリング錯覚として知られています。当ジェネレーターはブラウザのCSPRNGで検証された均一分布の乱数を生成します。
crypto.getRandomValues()のブラウザ互換性
crypto.getRandomValues()はすべてのモダンブラウザでサポートされています(Chrome 11+、Firefox 21+、Safari 6.1+、Edge 12+)。非常に古いブラウザを使用している場合、ツールが動作しない可能性があります。現在のすべての主要ブラウザバージョンはWeb Crypto APIを完全にサポートしています。
乱数生成に関するよくある質問
乱数ジェネレーターとは何ですか?
乱数ジェネレーター(RNG)は、予測可能なパターンを欠く数値を生成するシステムです。2つのタイプがあります:物理的エントロピー源(熱雑音、放射性崩壊、大気ノイズ)を使用する真性乱数生成器(TRNG)と、初期値でシードされた決定論的アルゴリズムを使用する疑似乱数生成器(PRNG)です。当ツールは、OSのエントロピープールからシードを取得する暗号的に安全なPRNGを使用し、ほとんどのアプリケーションに適した高品質のランダム性を提供します。
真の乱数と疑似乱数 — 違いは何ですか?
真の乱数は根本的に予測不可能な物理プロセス(量子現象、熱雑音)から生まれます。疑似乱数は決定論的アルゴリズムから生まれ、同じシードが与えられると同じシーケンスを生成します。CSPRNGはギャップを埋めます——アルゴリズムを使用しますが真のエントロピー源からシードされるため、実用上予測不可能でありながら、テスト用に高速で再現可能です(シードがわかっている場合)。
乱数生成における小数精度の仕組みは?
小数精度は小数点以下に表示する桁数を制御します。精度0では整数(例:42)が得られます。精度2では百分の一単位(例:42.57)が得られます。精度はJavaScriptのtoFixed()メソッドで適用され、生の乱数値を指定された小数点以下桁数に丸めます。精度が高いほど範囲内の可能な一意の値が増え、ユニークモードを使用する際に重要です。
なぜMath.random()ではなくcrypto.getRandomValues()を使うのですか?
Math.random()は予測可能なアルゴリズム(通常xorshift128+)を使用しており、攻撃者が十分な出力を観察すればリバースエンジニアリングできます。アニメーションやカジュアルゲームには適していますが、パスワード、トークン、ギャンブル、セキュリティには絶対に使用すべきではありません。crypto.getRandomValues()はOSの暗号的に安全なジェネレーターを使用し、ハードウェアエントロピーからシードされ、予測攻撃に耐えるよう設計されています。予測不可能性が重要なアプリケーションでは、常にcrypto.getRandomValues()を使用してください。
乱数ジェネレーターの実用的な用途は?
乱数は多くの分野で不可欠です:暗号(鍵生成、ノンス、ソルト)、ゲーム(サイコロ、カードシャッフル、戦利品)、科学計算(モンテカルロシミュレーション、ランダム化アルゴリズム)、統計(ランダムサンプリング、ブートストラップ)、ソフトウェアテスト(ファジング、ランダムテストデータ)、宝くじとギャンブル、A/Bテスト(ランダムユーザー割り当て)、セキュリティ(CSRFトークン、パスワード生成)。当ツールは精度制御が重要な非暗号アプリケーションに適しています。
重複を許可すべきか防ぐべきか?
ユースケースによります。ほとんどのアプリケーションでは重複を許可するのが正しいです——各数値は独立したランダムイベントであるべきで、重複はランダム性の自然な一部です。非復元抽出が必要な場合に重複を防ぎます——例えば、宝くじ番号の抽選、プールからのランダム勝者の選択、シャッフルなどです。重複を防ぐには、要求された数を収容するのに十分な大きさの範囲が必要であることに注意してください。
再現可能な乱数のためにシードを設定できますか?
当ツールはブラウザのCSPRNGを使用しており、手動シード設定をサポートしていません——これはセキュリティ上の意図的な設計です。シード付き(再現可能な)乱数が必要な場合は、seedrandom.jsや線形合同法生成器のような決定論的PRNGライブラリが必要です。シード付きPRNGはゲームのプロシージャル生成、決定論的テスト、再現可能な研究に有用ですが、セキュリティ上重要なアプリケーションには使用すべきではありません。
乱数範囲に制限はありますか?
当ツールはJavaScriptの安全な整数および浮動小数点精度の制限内で任意の数値範囲をサポートします。実用的な範囲はJavaScriptのNumber型(IEEE 754倍精度)によって決まり、2^53までの整数と最大15〜17桁の有効数字を持つ小数を正確に表現できます。金融、ゲーム、統計を含むほとんどのユースケースでは、これらの制限は実用的な要件をはるかに超えています。
生成された数値は統計的にどの程度ランダムですか?
数値はブラウザのCSPRNGから来ており、標準的な統計的ランダム性テスト(diehard、NIST SP 800-22)に合格します。ターゲット範囲へのスケーリングには均一除算(モジュロではなく)を使用し、バイアスを導入せずに均一分布を維持します。実用上、出力は統計的に真の乱数と区別できません。暗号アプリケーションでは、その目的のために設計・監査された基盤となるCSPRNGに依拠してください。