PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPでランダム文字列を生成する方法【初心者向けサンプルコード付き】

PHPでランダムな文字列を生成するには、いくつかの方法があります。本記事では、md5() 関数と mt_rand() 関数を組み合わせたシンプルな手法と、PHP 7以降で利用できる暗号学的に安全な random_bytes() 関数を使った方法を、サンプルコードと実行結果とともに解説します。

例1:md5() と mt_rand() を組み合わせる方法

mt_rand() で生成した乱数を md5() でハッシュ化し、substr() で先頭5文字を切り出すことで、ランダムな文字列を作成します。

<?php
   $res = substr(md5(mt_rand()), 0, 5);
   echo "ランダムな文字列を表示します...\n";
   echo $res;
?>

出力結果

上記のコードを実行すると、次のような出力が得られます(実行するたびに値は変わります)。

ランダムな文字列を表示します...
1c856

例2:random_bytes() を使った安全な方法

PHP 7以降では、暗号学的に安全な乱数バイト列を生成できる random_bytes() 関数が利用できます。生成したバイナリデータを bin2hex() で16進数の文字列に変換すれば、ランダムな文字列として扱えます。セキュリティが重要な場面では、この方法が推奨されます。

<?php
   $res = substr(md5(mt_rand()), 0, 5);
   echo "ランダムな文字列を表示します...\n";
   echo $res;
   echo "\n別のランダムな文字列を表示します...\n";
   $res2 = bin2hex(random_bytes(5));
   echo $res2;
?>

出力結果

ランダムな文字列を表示します...
a3541
別のランダムな文字列を表示します...
335b83d9e9

使用している関数の役割

  • mt_rand():メルセンヌ・ツイスタ法による高速な乱数を生成します。
  • md5():与えられた文字列から32文字の16進数ハッシュ値を計算します。
  • substr():文字列の一部を切り出します。ここでは先頭から5文字を取得しています。
  • random_bytes():暗号学的に安全な疑似乱数バイト列を生成します(PHP 7以降)。
  • bin2hex():バイナリデータを16進数表記の文字列に変換します。

用途に応じて適切な方法を選びましょう。テストデータの生成などであれば最初のシンプルな方法でも十分ですが、認証トークンやパスワードリセット用キーなどセキュリティに関わる処理では、random_bytes() を使うことをおすすめします。

  1. Pythonのuuidモジュールを使ってランダムな一意ID(UUID)を生成する方法

    UUIDは「Universally Unique Identifier(汎用一意識別子)」の略称で、Pythonの標準ライブラリとして提供されているモジュールです。128ビットのIDを扱うことができ、ランダムなオブジェクトに対して重複しない識別子を生成するために広く利用されています。 UUIDの主なメリット オブジェクトごとに一意なランダムIDを簡単に生成できる。 暗号化やハッシュ処理などのアプリケーションでIDとして活用できる。 ドキュメントやアドレスなど、さまざまなデータの一意な識別子として使用できる。 方法1:uuid1() を使ってIDを生成する uuid1() は、ホストのMAC

  2. 【Python入門】特定の文字列に一致するまでランダムな文字列を自動生成する方法

    はじめに ある文字列が与えられたとき、英小文字・大文字・数字・記号などをランダムに組み合わせた文字列を生成し続け、最終的に元の文字列と完全に一致する文字列が作られるまで繰り返す、という処理をPythonで実装してみましょう。 この手法は「無限の猿の定理(Infinite Monkey Theorem)」をシミュレートするプログラムとしても知られており、ランダム性と反復処理の仕組みを学ぶのに絶好の題材です。 処理の流れ(アルゴリズム) ステップ1: 目標となる文字列を入力として受け取る。 ステップ2: 英小文字・英大文字・数字・特殊文字など、使用可能なすべての文字を変数に格納する。 ステップ