この乱数生成ツールでできること
指定した範囲から、整数や小数をランダムに選びます。くじの当選番号のように1つだけ引くことも、テストデータ、授業でのゲーム、サンプル抽出のために何千個も作ることもできます。範囲内のすべての数字はまったく同じ確率で選ばれ、範囲の両端も含まれます。
すべての処理はブラウザの中で行われます。数字がサーバーに送られることはなく、ページを離れた後に何かが保存されることもありません。
使い方
- 「最小値」に下限の値を、「最大値」に上限の値を入力します。負の数も使えます。
- 「個数」に必要な数を設定します。上限は10,000個です。
- 「小数点以下の桁数」を選びます。整数が必要なら「なし(整数)」のままにします。
- 「並び順」を「出た順」「小さい順」「大きい順」から選びます。
- 同じ数字を1回しか出したくない場合は、「重複なし」をオンにします。
- 「結果の区切り」を、改行、カンマとスペース、スペース、カンマ、なしから選びます。
- 「数字を生成」を押します。
数字が1つの場合は、「結果」の下に大きく表示されます。複数の場合は、スクロールできる欄に一覧が表示されます。「コピー」を押すとすべてコピーできます。直近10回分の抽選は「最近の結果」に、それぞれ「コピー」ボタン付きで一覧表示されます。「クリア」を押すと一覧が空になります。一覧は、ページを離れるか再読み込みするまでの間だけ保持されます。
たとえば日本のロト6のように「1から43までの中から6つ」を選びたい場合は、最小値を1、最大値を43、個数を6にして、「重複なし」をオンにします。
生成例
以下は、ツールのコードを実際に実行した結果です。あなたが実行すれば別の結果になります。それこそが乱数です。
| 設定 | 実行結果の一例 |
|---|---|
| 1から100、1個 | 74 |
| 1から6、5個(サイコロ) | 5, 4, 1, 5, 2 |
| 1から49、6個、重複なし、小さい順 | 6, 12, 19, 24, 27, 33 |
| 0から1、3個、小数点以下2桁 | 0.45, 0.44, 0.63 |
| -10から10、5個、大きい順 | 6, 5, 3, -7, -7 |
| 1000から9999、3個、重複なし | 7292, 7269, 5088 |
| 1から10、10個、重複なし | 9, 5, 2, 10, 3, 4, 1, 7, 8, 6 |
最後の行は、1から10を完全にシャッフルした結果です。10個の範囲から重複なしで10個を選ぶと、すべての数字がランダムな順番で1回ずつ出てきます。
仕組み
ツールは、crypto.getRandomValues を使ってブラウザにランダムなビットを要求します。そのビットを指定範囲の数字に変換するには注意が必要です。すぐに思い付く近道は、大きな乱数を範囲の大きさで割った余りを使う方法です。しかしこの方法は少し不公平です。範囲の大きさで乱数源がちょうど割り切れない場合、一部の結果がほかより出やすくなります。これをモジュロバイアスと呼びます。
これを避けるために、このツールは棄却サンプリングを使っています。範囲でちょうど均等に分けられる、乱数の最大のブロックを計算します。引いた値がそのブロックの外に出たら捨てて、もう一度引き直します。棄却はめったに起きないので一瞬で終わり、範囲内のすべての数字が同じ確率になります。
小数の場合は、範囲を拡大して計算します。0から1、小数点以下2桁なら、0から100の範囲で引いてから100で割ります。こうすることで、小数の結果も公平に保たれます。
「重複なし」では、同じ値が2回選ばれないようにします。範囲が小さい場合はシャッフルして先頭から取り出し、範囲が大きい場合は1つずつ引いて、すでに選ばれた値は飛ばします。どちらの方法でも、範囲が1から10でも1から10億でも、非復元抽出の公平なサンプルになります。
ヒントと制限
- 両端も含まれます。 1から6の範囲なら、本物のサイコロと同じように1も6も出ます。
- 重複するのは普通のことです。 「重複なし」をオンにしていなければ、同じ数字が2回出るのは想定どおりです。上の表のサイコロの行でも、5回のうち5が2回出ています。
- 範囲が狭すぎる場合。 範囲に含まれる数より多くの重複しない数字を指定すると、短い一覧ではなくメッセージが表示されます。
- 非常に広い範囲。 最小値と最大値の差は約9,000兆(2の53乗)まで指定できます。非常に広い範囲で小数点以下の桁数を多くすると、この上限に達してメッセージが表示されることがあります。
- 公式の抽選には向きません。 このツールは公平ですが、公式の宝くじや懸賞の抽選では、監査済みの機器や立会人が必要になることがよくあります。適用されるルールを確認してください。
- パスワードが必要ですか? 英字、数字、記号を組み合わせる強力なパスワード生成ツールを使ってください。
そのほかの乱数の作り方
Excel と Google スプレッドシート。 =RANDBETWEEN(1,100) は1から100の整数を1つ返します。最新の Excel では、=RANDARRAY(10,1,1,100,TRUE) で10個のセルを埋められます。値はシートが再計算されるたびに変わるので、残したい場合は値として貼り付けてください。
Python。 ゲームやシミュレーションなら random.randint(1, 100) で十分です。セキュリティに関わる用途では secrets.randbelow(100) + 1 を使い、重複しない数字を選ぶには random.sample(range(1, 50), 6) を使います。
JavaScript。 Math.random() は手軽ですが、予測できないようには設計されていません。公平さが重要な場合は、このページと同じように crypto.getRandomValues と棄却サンプリングを使ってください。
コマンドライン。 Linux と macOS では、shuf -i 1-100 -n 1 で1から100の数字を1つ表示できます。
関連ツール
数字の一覧を順番に並べるには、数字の並べ替えツールを使ってください。数字ではなく一覧から名前や選択肢を選ぶなら、ランダム選択ツールを試してください。日付の範囲からランダムな日を選ぶには、ランダム日付生成ツールを使ってください。