Laravel 5 collectionを使った必ず記号も含まれるランダムパスワード
str_ramdom()を使うより、もう少し強固な必ず記号も含まれるランダムなパスワードを生成したい
Larvalで以下のようにするとランダムな10文字を生成できます。パスワードリセット時などに便利
echo str_ramdom(10);
//Aek3Gkfk89
//Aek3Gkfk89
ただしパスワード設定の仕様がもう少し強固で、
- 必ず半角大文字と半角小文字が入る
- 数字を一つ以上含む
- 記号を一つ以上含む
という「必ず大文字や数字や記号をそれぞれ含めなければならない」というルール縛りがあるとただランダムな文字列を生成するだけでは足りない場合があります。
(生成された文字がただのランダムだと、大文字や数字が一切含まれないということは当然発生しうる)
必ず仕様に乗っ取る強固なパスワードを生成する手順
- a から zの小文字配列をランダムで生成して指定数 配列を抽出
- Aから Zの小文字配列をランダムで生成して指定数 配列を抽出
- 0から 9の整数を配列をランダムで生成して指定数 配列を抽出
- パスワードに使える記号を配列に。指定した数だけ 配列を抽出
- 1~4までの手順で生成された配列を合体
- 5の手順で合体した配列を文字列に変換し、シャッフル
4番目の記号は以下の通りとした
! $ % & ‘ ( ) * + , / ; < = > ? [ ] ^ { } ~
ランダムにいきなりとりだすのではなく、半角英字と数字、記号をそれぞれ別々に取り出してから 合体させて 最後にシャッフルすること。
Laravel5で 必ず数字や記号が含まれるランダムなパスワードの生成の例
CollectionはLaravelで配列からいい感じに配列を抽出できるヘルパーです。
ついでに非Laravelerの人へ捧ぐ、同じような強固なパスワード生成
array_flipは優秀だということがわかった。