乱数生成器

任意の範囲でランダムな数字、リスト、複数セットの数字を生成できます — すべてお使いのブラウザ内で、暗号学的に安全なランダム性を使って処理され、サーバーに送信されることはありません。

「生成」を押して抽選
オプション

素早く公正な方法でランダムな数字がほしいですか。この無料のオンライン乱数生成器なら、1から10までのシンプルな範囲から数十億にも及ぶ範囲まで、お好きな範囲で数字を1つ、あるいは数字のリストをまとめて生成できます。「最小」と「最大」に最小値と最大値を設定し、「個数」で必要な数字の個数を選んで、「生成」を押してください。両端の値も範囲に含まれるため、1から10の範囲なら1と10のどちらも結果として出ます。

結果はすべて、お使いのブラウザ上で直接、Web Crypto API (crypto.getRandomValues) を使って生成されます。これは、OSが提供する暗号学的に安全な乱数源から、暗号学的に強力なランダムな値を取得する仕組みです。サーバーに送信されるものは一切なく、記録も一切残らず、私たちがあなたの数字を見ることもありません。生成は瞬時に行われ、プライバシーも守られ、ページが一度読み込まれれば低速な回線でも問題なく動作し続けます。

各設定は、実際に人々がランダムな数字を必要とする場面のために用意されています。「重複なし」をオンにすると、同じ数字が2回出ることはなくなります — くじ引きや抽選、あるいは重複なしでグループ分けをしたいときにぴったりの設定です。500人の参加者から20人の当選者を選びたい場合はどうすればよいでしょうか。「最小」を1、「最大」を500に設定し、「重複なし」をオンにして、「個数」を20に設定し、「生成」を押します。「並び順」では結果を昇順または降順に並べ替えでき、ボタン1つですべての結果をコピーできます。「出力形式」を「改行」から「スペース区切り」や「カンマ区切り」に切り替えると「セット数」が表示され、複数の独立した抽選を一度に行えます — たとえば20組の抽選それぞれで3つの数字を生成する、といった具合です。そして「セット間の重複を許可」で、同じ数字が複数のセットにまたがって出てもよいかどうかを決められます。

実際のところ、ランダムな値はどのように生成されているのでしょうか。お使いのブラウザは、Math.random() のようなJavaScriptの疑似乱数生成器ではなく、Web Crypto APIを通じて暗号学的に強力なランダムな値を提供します。「生成」を押すと、ページはcrypto.getRandomValuesを使ってランダムな値を要求し、それを使って選択した範囲内の数字を作成します。乱数の基盤となる源はOSが提供するため、ページ自体が独自のシード (seed) や疑似乱数の列を保持しておく必要はありません。

生の値を範囲に変換する部分こそ、多くの生成ツールが静かに間違いを犯す場所であり、ここだけで1つの段落を割く価値があります。値を範囲のサイズで割った余りを使う方法は、一見わかりやすいものの偏りがあります — 範囲の大きさが2^32を割り切れない限り、最も小さい数字がわずかに多く出てしまうのです。この不具合はモジュロバイアス (modulo bias) と呼ばれ、理論上だけでなく実際に測定できる偏りです。このツールでは代わりに、範囲の大きさで割り切れない部分に当たる値を除外し、再び値を生成します — これはリジェクションサンプリング (rejection sampling) と呼ばれる手法です。余分な生成が数回発生するぶんコストはかかりますが、その代わり正確な保証が得られます。「最小」と「最大」の間のすべての数字が、ほぼ同じではなく、まったく同じ確率で出るのです。

何が数字を本当にランダムにするのでしょうか。ある数字が十分にランダムであるとは、それまでの結果から次の値について何もわからない状態を指します — そして実際には、ここでは3つの異なるアプローチがあります。Math.random() のような通常の疑似乱数関数は決定論的なアルゴリズムを実行します。内部状態を知っている人なら誰でも、そのシーケンス全体を再現できてしまいます。これはスライドショーをシャッフルする程度には十分ですが、結果が予測不可能でなければならない用途にはまったく向きません。このツールが使用している暗号学的に安全な生成器 (CSPRNG) もアルゴリズムである点は同じですが、システムの安全な乱数源から予測不可能な値を生み出すように設計されており、その出力を観察しても次に何が来るかはまったくわかりません。大気中のノイズや放射性崩壊のような源による物理的な乱数は、また別のアプローチですが、範囲内の数字を生成するという実用面では、その差はほとんど関係ありません。ブラウザがMath.random() を改良するのではなく、わざわざ別の暗号用APIを用意しているのはまさにこのためです。この2つはまったく異なる問題を解決するものであり、結果が重要な意味を持つ場合には、暗号学的に安全な生成器が適しています。

ランダムな数列は、人間の目にランダムに見える必要はありません。1から10までの数字を10個生成してみてください。繰り返しや、7、7、8のような同じ数字の繰り返し、あるいは高い数字ばかりが続く短い並びが、頻繁に見られるはずです — そして、そのどれもがまったく普通のことです。ランダム性とは予測不可能であることであり、均等に分布しているように見えることではありません。それぞれの生成は独立しており、それ以前の数字が次の数字に何らかの影響を与えることは一切なく、特定の数字が「そろそろ出るはず」ということもありません。この逆を信じてしまう本能こそがギャンブラーの誤謬であり、人間自身がランダムな数字を生み出すのが苦手な理由も同じ本能によるものです — ランダムな数列を考えてほしいと頼まれると、人は繰り返しを避け、実際の偶然よりもずっと均等に値を散らしてしまいます。不自然なほどきれいに整った結果は、人間が作ったものらしさの表れです。本当のランダム性では、むしろ数字がかたまって現れることがあります。

なぜこの乱数生成器を選ぶべきなのでしょうか

ランダムな数字は、多くの人が思うよりもずっと多くの場面で活躍しています。先生は特定の生徒をひいきすることなく生徒を指名できます。配信者やマーケティング担当者は、結果を信じてもらえる観客の前で、プレゼント企画や抽選の当選者を決めます。プレイヤーは失くしたサイコロの代わりに使ったり、誰が先に始めるかを決めたりしますし、大会ではくじ引きでスタート順を決めます。研究者はランダムな標本を選ぶことで、実際に調査に参加した人以外にも結果を一般化できるようにします。開発者はテストデータを生成したり、シード (seed) を使ってシミュレーションを初期化したり、QA中に識別子を選んだりします。共通しているのは、あとから説明できるランダムな選択プロセスだという点です。この抽選は暗号学的なランダム性を使い、すべてお使いのデバイス上で完結するため、誰かに結果を疑われても、どのようにその結果が生まれたかを示すことができます。

このツールには、知っておく価値のある正直な制約がいくつかあります。「重複なし」モードでは、範囲に含まれる数以上の数字を生成することはできません — 1から10の範囲で20個のユニークな値を生成することは、そもそも不可能です。それぞれの抽選は独立しており、それまでの結果が次の結果に影響を与えることはありません。そのため、ページを再読み込みしても何らかのサイクルがリセットされるわけではありません — そもそも、いるべきサイクル自体が存在しないのです。数字は暗号学的に強力ですが、この抽選はあくまで公正な選択であり、予測ではありません。公式の抽選では、それぞれの主催者が独自の物理的または認証済みの機材を使用しており、お使いのブラウザで計算される内容とは一切関係がありません。こうした制約の範囲内では、保証はむしろより強力になります — あなたの範囲内のすべての数字が、毎回まったく同じ確率を持つのです。

FAQ

この乱数は暗号学的に安全ですか。

はい。お使いのブラウザのWeb Crypto API (crypto.getRandomValues) を使用しており、OSの暗号学的に安全な源からランダム性を取得します。単純な疑似乱数関数とは異なり、その出力は実際に予測不可能であるよう設計されており、リジェクションサンプリングによって最も小さい値が優先されることなく、範囲内のすべての数字が同じ確率で出るようになっています。

特定の範囲でランダムな数字を生成するにはどうすればよいですか。

「最小」欄に取りうる最小の値を、「最大」欄に取りうる最大の値を入力し、「生成」を押してください。両方の境界値も結果に含まれるため、1から10の範囲なら1と10のどちらも生成されます。

一度に複数のランダムな数字を生成できますか。

はい。「個数」欄に必要な数(最大1000まで)を設定すると、ツールはワンクリックでリスト全体を生成します。その後、コピー用ボタンで結果をすべてクリップボードにコピーしたり、ファイルに保存したりできます。

一度に複数のセットの数字を生成できますか。

はい。「出力形式」を「改行」から「スペース区切り」または「カンマ区切り」に切り替えると、「セット数」欄が表示されます。必要な独立した抽選の数を設定してください — たとえば20組の抽選それぞれで3つの数字を生成する、といった具合です — そして重複を異なるセット間で許可するかどうかも選べます。

生成された数字を並べ替えることはできますか。

はい。「並び順」オプションを使えば、各リストを昇順または降順に並べ替えられます。「なし」のままにしておくと、生成された順番のまま数字が保持されます。

重複する数字を避けるにはどうすればよいですか。

「重複なし」スイッチをオンにしてください。これをオンにすると、リスト内のすべての生成された数字が異なるものになります — くじ引きや賞品の抽選、グループ分けに最適です。ただし、個数は範囲のサイズを超えることはできません: 1から10の範囲で20個のユニークな数字を生成することはできません。

なぜ同じ数字が何度も出てくるのですか。

独立した抽選は繰り返されることがあり、それこそがランダム性というものだからです。それぞれの抽選は、それ以前のすべての抽選を完全に無視するため、1から10の範囲では、同じ数字がもう一度出る確率は10分の1です — これはよくあることであり、壊れているわけではありません。重複のないリストが必要な場合は、「重複なし」をオンにしてください。これは意図的に抽選を制限するものであり、何らかの不具合を修正するものではありません。

なぜランダムな数列はランダムに見えないのですか。

ランダム性とは予測不可能であることであり、均等に分布することではないからです。人はランダムな結果がきれいに散らばっていると期待しがちなので、7, 7, 8のようなかたまりや繰り返し、短い連続は、実際には偶然が生み出す典型的な結果であるにもかかわらず、間違いのように見えてしまいます。人間の目に整って見える数列でも、ランダムである可能性は十分にあります。

ブラウザで生成されたランダム性は信頼できますか。

はい、ここでのようにWeb Crypto APIから得られたものであれば信頼できます。crypto.getRandomValuesは、暗号学的に安全なランダムな値を取得するためのWeb Crypto APIの機能です。そのランダム性の源はJavaScriptではなくOSによって提供されます。本当に何かが重要な場面で信頼すべきでないのは、むしろMath.random() のほうです。これは決定論的であり、予測不可能であるように設計されたことは一度もありません。

ランダムな数字は予測したり、影響を与えたりできますか。

ここではできません。値はお使いのOSの暗号学的に安全な生成器から得られるため、それ以前の結果から次の値について何もわかりません。抽選はすべてお使いのデバイス上で行われるため、改ざんできるサーバーも、誰かが傍受できるリクエストも存在しません。私たちもあなたの結果に影響を与えることはできません。なぜなら、私たちがそれを見ることは一切ないからです。

プレゼント企画やくじ引きの当選者を選ぶのに適していますか。

はい。各参加者に番号を割り当て、その範囲内で結果を生成すれば、その番号に対応する参加者が当選します。ソースが暗号学的に安全であり、抽選がすべてお使いのデバイス上で行われるため、参加者から結果を疑われた場合でも、プロセスを簡単に説明し、記録として残すことができます。宝くじの購入番号を選ぶ場合も、このツールはランダムに数字を選ぶ手段として使えますが、当選を予測するものではありません。公式の抽選とはまったく無関係です。

ページを再読み込みするとランダム性は変わりますか。

いいえ、そもそもその必要もありません。それぞれの抽選はすでにOSに新しいランダムな値を要求しているため、「生成」を10回押しても、毎回ページを再読み込みしてから押しても、結果は独立しています。リセットすべきサイクルも、古くなる状態も存在しません — 再読み込みは、画面に表示されている結果を消去するだけです。

この乱数生成器は無料ですか。また、数字は保存されますか。

このツールは完全に無料で、登録も不要です。すべての数字はお使いのブラウザ内でローカルに生成され、デバイスの外に出ることは一切ないため、たとえ私たちが望んだとしても、あなたの結果を保存したり見たりすることはできません。