なぜ「ランダム数字生成ユーティリティ」が業務で役に立つのか
業務システムでは、「数字だけのランダム値」が驚くほどよく使われます。 ワンタイムパスコード(OTP)、SMS認証コード、検証番号、受付番号、伝票番号の一部、テストデータ用のダミー数値など、用途はかなり広いです。
そのたびに場当たり的に Math.random() を使ったり、Random を直接叩いたりしていると、 コードがバラバラになり、強度や桁数のルールも統一されません。 そこで「ランダム数字生成ユーティリティ」を用意しておくと、 どの機能からも同じルールで数字だけのランダム値を生成できるようになり、 セキュリティ面でも保守性の面でも、かなり楽になります。
ここからは、プログラミング初心者向けにステップバイステップで考えながら、 実務で使えるランダム数字生成ユーティリティを丁寧に解説していきます。
ステップ1:乱数クラスの選び方を理解する
Random と SecureRandom の違いを押さえる
ランダム数字を作るためには、まず「乱数」が必要になります。 Java には代表的な乱数クラスとして、java.util.Random と java.security.SecureRandom があります。
Random は、ゲームや簡単なシャッフルなど「セキュリティを気にしない用途」には十分ですが、 乱数のパターンを解析されると、次に出てくる値をある程度予測されてしまう可能性があります。
一方 SecureRandom は、暗号用途向けに設計されており、 攻撃者が乱数のパターンを推測しにくいようになっています。
ランダム数字の用途には、次のようなものがあります。
- セキュリティ用途:OTP、検証コード、トークンの一部など
- 非セキュリティ用途:テストデータ、ダミーID、UI上のランダム表示など
セキュリティ用途では必ず SecureRandom を使うべきです。 非セキュリティ用途でも、迷ったら SecureRandom に統一しておくと安全です。
ステップ2:「数字だけ」のランダム値をどう作るか
0〜9 の数字をランダムに並べる基本発想
ランダム数字生成の基本は、とてもシンプルです。
- 「0〜9」の数字を文字として扱う
- 乱数で 0〜9 のどれかを選ぶ
- それを指定した桁数分だけ繰り返す
まずは、数字だけの文字列を用意します。
private static final String DIGITS = "0123456789";
Javaこの DIGITS の中から、乱数でインデックスを選び、その位置の文字を取り出す—— これがランダム数字生成の基本構造になります。
