laravel5.5で、パスワード生成時に「大文字1文字以上・小文字1文字以上・数字1文字以上の8文字固定の乱数生成」が見つからないので、自分で考えて実装してみた
1, 8文字固定
2, 大文字1文字ランダム生成
3, 小文字1文字ランダム生成
4, 数字1文字ランダム生成
5, 残り5文字はランダム生成
6, 8文字シャッフルして完成!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
// 大文字1文字以上・小文字1文字以上・数字1文字以上の8文字固定の乱数生成 public function generate_password($password_length = 8) { $char_seed = [ 'ABCDEFGHIJKLMNOPQRSTUVWXYZ', 'abcdefghijklmnopqrstuvwxyz', '0123456789' ]; $password_string = ""; //シードの種類だけループ for($i=0; $i<count($char_seed); $i++){ // 各シードから1文字だけ抽出するindexを生成 $index = mt_rand(0, mb_strlen($char_seed[$i]) - 1); // 各シードから1文字だけ抽出 $password_string .= mb_substr($char_seed[$i], $index, 1); } // 残りの文字は乱数 $password_string .= str_random($password_length - count($char_seed)); // 順不同に、かき混ぜる return str_shuffle($password_string); } |
なんか、アルゴリズムの授業みたいだな・・・。