MENU

【PHP】Lesson1-☆1:ランダムパスワードを生成して文字列操作を学ぼう

tggaa478@yahoo.co.jp

Lesson1:基礎文法編を締めくくる演習問題に挑戦しましょう。

Lesson1:基礎文法編
 ・Lesson1-1:PHP学習の入り口|初めてコードを書いてみよう
 ・Lesson1-2:変数と定数を理解しよう
 ・Lesson1-3:データ型とキャストを理解しよう
 ・Lesson1-4:四則演算をしよう
 ・Lesson1-5:文字列を理解しよう
 ・Lesson1-6:文字列の連結と埋め込みを理解しよう
 ・Lesson1-7:乱数を生成しよう
 ・確認問題1-1:ランダムパスワードを生成しよう ◁今回はココ
Lesson2:制御構造編
Lesson3:関数編
Lesson4:データ構造編
Lesson5:クラス

<<前のページ

学習記事一覧

次のページ>>

演習問題|ユーザー名から安全なパスワードを生成するPHPプログラムを作ろう

新規登録時にユーザー名を基にランダムなパスワードを生成するPHPプログラムを作成しましょう。

このプログラムではユーザー名を入力し、その先頭4文字と4桁のランダムな数字を組み合わせてパスワードを生成します。

最後に、入力されたユーザー名と生成されたパスワードを表示します。

この演習の要件

以下の要件に従ってコードを完成させてください。

  • 標準入力を使用してユーザー名を取得すること。
  • ユーザー名の先頭4文字を取得し、変数$passNameに保存すること。
  • 4桁のランダムな数値を生成し、変数$numPassに保存すること。
  • $passName$numPassを連結し、ランダムパスワードを作成すること。
  • ユーザー名と生成されたパスワードを画面に表示すること。

ただし、以下のような実行結果となること。

新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:
Alice
ランダムなパスワードを作成しました。
ユーザー名:Alice
パスワード:Alic1234

解き方のヒント

1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。

Q
ヒント1【コードの構成を見る】

正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)

1:「新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:」と出力
2:標準入力から値を取得し、trim関数で前後の空白を除去して変数$nameに代入
3:substr関数で変数$nameの先頭4文字を取得し、変数$passNameに代入
4:rand関数で0から9999の乱数を生成し、str_pad関数で4桁にゼロ埋めして変数$numPassに代入
5:変数$passNameと変数$numPassを連結して変数$passに代入
6:「ランダムなパスワードを作成しました。」と出力
7:「ユーザー名:」と変数$nameの値を出力
8:「パスワード:」と変数$passの値を出力

Q
ヒント2【穴埋め問題にする】

以下のコードをコピーし、コメントに従ってコードを完成させて下さい。

<?php
// 1. 新規登録メッセージを表示
echo "新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:" . PHP_EOL;

// 2. ユーザー名を入力し、変数$nameに保存
/*【穴埋め問題1】
ここに標準入力から値を取得し、trim関数で前後の空白を除去して変数$nameに代入するコードを書いてください。
*/

// 3. $nameの先頭4文字を取得し、変数$passNameに保存
/*【穴埋め問題2】
ここにsubstr関数で$nameの先頭4文字を取得し、変数$passNameに代入するコードを書いてください。
*/

// 4. 4桁の乱数を生成し、変数$numPassに保存
/*【穴埋め問題3】
ここにrand関数を使用して0から9999の乱数を生成し、str_pad関数で4桁にゼロ埋めして$numPassに代入するコードを書いてください。
*/

// 5. $passNameと$numPassを連結して、変数$passに保存
/*【穴埋め問題4】
ここに$passNameと$numPassを連結して$passに代入するコードを書いてください。
*/

// 6. ランダムなパスワード生成完了メッセージを表示
echo "ランダムなパスワードを作成しました。" . PHP_EOL;

// 7. ユーザー名とパスワードを表示
echo "ユーザー名:$name" . PHP_EOL;
echo "パスワード:$pass" . PHP_EOL;

このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。

演習問題の答え合わせ

この問題の正解コードとその解説は以下の通りです。

クリックして開いて確認してください。

Q
正解コード
<?php
// 1. 新規登録メッセージを表示
echo "新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:" . PHP_EOL;

// 2. ユーザー名を入力し、変数$nameに保存
$name = trim(fgets(STDIN));

// 3. $nameの先頭4文字を取得し、変数$passNameに保存
$passName = substr($name, 0, 4);

// 4. 4桁の乱数を生成し、変数$numPassに保存
$numPass = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);

// 5. $passNameと$numPassを連結して、変数$passに保存
$pass = $passName . $numPass;

// 6. ランダムなパスワード生成完了メッセージを表示
echo "ランダムなパスワードを作成しました。" . PHP_EOL;

// 7. ユーザー名とパスワードを表示
echo "ユーザー名:$name" . PHP_EOL;
echo "パスワード:$pass" . PHP_EOL;
Q
正解コードの解説

コードをブロックごとに分割して解説します。

ユーザー名の入力

echo "新規登録を開始します。ユーザー名をアルファベット4文字以上で入力してください:" . PHP_EOL;
$name = trim(fgets(STDIN));
  • echo は、メッセージを表示するためのPHPの基本的な関数です。この行ではユーザーにユーザー名の入力を促しています。
  • fgets(STDIN) は標準入力から1行のデータを読み取ります。
  • trim() は入力された文字列の前後の不要なスペースや改行を取り除きます。

ユーザー名の先頭4文字を取得

$passName = substr($name, 0, 4);
  • substr() は文字列から指定した部分を切り取る関数です。この場合ユーザー名の先頭4文字を取り出しています。
  • 0 は開始位置、4 は切り取る文字数を指定しています。

4桁のランダムな数字を生成

$numPass = str_pad(rand(0, 9999), 4, '0', STR_PAD_LEFT);
  • rand(0, 9999) は、0から9999の間でランダムな整数を生成します。
  • str_pad() は、文字列を指定した長さになるように埋め合わせを行います。この場合、4桁になるまで左側に0を追加します。

パスワードを生成

$pass = $passName . $numPass;

. はPHPの文字列結合演算子です。

ユーザー名の先頭4文字と4桁の数字を結合して、パスワードを生成します。

結果の表示

echo "ランダムなパスワードを作成しました。" . PHP_EOL;
echo "ユーザー名:$name" . PHP_EOL;
echo "パスワード:$pass" . PHP_EOL;
  • echo を使って生成したパスワードとユーザー名を画面に表示します。
  • $name$pass は、それぞれ変数に格納された値を出力します。

まとめ

このコードは文字列操作(substrstr_pad)やランダムな数値生成(rand)を学ぶのに最適です。

またユーザーの入力を利用し、動的に結果を生成する方法を体験できます。

コードを手元で実行し動作を確認することで、PHPの基本を楽しく学ぶことができます!

もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいPHP学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

学習記事一覧

次のページ>>

記事URLをコピーしました