PHP str_shuffle関数を使って、ランダムパスワードを生成する

2019年10月23日

スポンサーリンク

str_shuffleとは

指定された文字列をランダムにシャッフル(バラバラ)するPHP関数。パスワード生成処理ではよく使われる。

前説

担当したプロジェクトで、大文字小文字の英字と数字を混在するパスワードを生成するという要件がありました。下請け会社(しかも2社)がそれぞれ作った機能がバグがあって、尚且つ実装手段に気にならなかったため、仕方なくて、自分が作るという残念なことになりました。
PHPのstr_shuffle関数は、指定した文字列をランダムにシャッフルするため、ランダムパスワードを生成するのに、str_shuffle関数を使って一番簡単だと思いますので、まずは、str_shuffle関数を紹介したいと思います。

str_shuffle関数の文法

str_shuffle( 'ランダムしたい文字列’);

返り値

ランダムにシャッフルされた文字列を返す。

str_shuffle関数を使って、ランダムパスワードを生成する

いよいよ本題に入ります。大文字小文字の英字と数字を混在するパスワードを生成するということなので、大文字小文字の英字と数字を含める文字列をstr_shuffle関数を使って、ランダムにシャッフルすればよいです。

※ランダムにシャッフルするので、順番はどうでも良いです。

ここで一つの問題が発生します。str_shuffle関数はあくまで、大文字小文字の英字と数字を混在する文字列をランダムにしますので、シャッフルした後の文字列の先頭8桁に、大文字小文字の英字と数字が混在するかどうかを保証しないことです。
それを解決するために、str_shuffle関数でランダムパスワードを生成するたびに、大文字小文字の英字と数字が混在するかどうかをチェックし、混在すれば、パスワードを返し、混在しなければ、もう一度str_shuffle関数でランダムパスワードを生成するという繰り返して処理すればと思います。
つまり、再帰関数を作れば良いです。

大文字小文字の英字と数字の混在チェックは、正規表現を使って判断しました。上記の正規表現が読みづらい、理解しにくいなら、シンプルなバージョンを下記に用意しました。お好きな方法を選んでください。(個人的に、上記のほうが好きです。)

正規表現については、主旨ではないので、詳しい説明は後日に紹介しますので、ここで割愛させていただきます。

まとめ

以上、str_shuffle関数を使って、ランダムパスワードを生成する実装方法を紹介しました。いかがでしょうか。意外と簡単ですね。ランダムパスワードの生成以外に、str_shuffle関数が実際のプロジェクトにいろいろなシーンに使われると思います。その際に、追って紹介します。
それでは!

スポンサーリンク