メールのパスワード設定一覧を作るときに半角英数で、メールアドレスが有効で、メールアドレスとは別にアカウントがあります。
いろんなチェックをして、生成して、配らないといけません。結構面倒ですし、エラーも多いので、こちらでプログラムを書いてみました。
追加仕様:(2名様のニーズを反映)
1.必ず英字大文字小文字数字記号の組み合わせを入れる。
2.10桁から12桁までランダム
サンプルプログラムは下記になります。CSV形式等は自分で行なってください。
https://abundcore.net/program-library/email-password/
<?php function generateRandomPassword() { // パスワードの長さを10から12桁の間でランダムに決定 $length = rand(10, 12); // 各カテゴリの文字 $lowercaseLetters = 'abcdefghijklmnopqrstuvwxyz'; $uppercaseLetters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $numbers = '0123456789'; $symbols = '#%=-+:?_<>[]{}()^!,.'; // 各カテゴリから最低1文字を確実に含める $password = $lowercaseLetters[rand(0, strlen($lowercaseLetters) - 1)]; $password .= $uppercaseLetters[rand(0, strlen($uppercaseLetters) - 1)]; $password .= $numbers[rand(0, strlen($numbers) - 1)]; $password .= $symbols[rand(0, strlen($symbols) - 1)]; // 全ての文字を結合して残りの部分をランダムに選択 $allCharacters = $lowercaseLetters . $uppercaseLetters . $numbers . $symbols; for ($i = strlen($password); $i < $length; $i++) { $password .= $allCharacters[rand(0, strlen($allCharacters) - 1)]; } // パスワードをシャッフルして各カテゴリの文字が最初に来ないようにする $password = str_shuffle($password); return $password; } function isValidUsername($username) { // ユーザーネームが半角英数とピリオド、ハイフンのみを含むかチェック return $username !== '' && preg_match('/^[a-zA-Z0-9\.\-]+$/', $username); } function isValidEmail($email) { return $email !== '' && filter_var($email, FILTER_VALIDATE_EMAIL); } $userData = []; $errors = []; if ($_SERVER["REQUEST_METHOD"] == "POST") { for ($i = 1; $i <= 5; $i++) { $username = $_POST["username$i"] ?? ''; $email = $_POST["email$i"] ?? ''; if ($username !== '' || $email !== '') { if (!isValidUsername($username)) { $errors[] = "ユーザーアカウント {$i} は無効です。半角英数とピリオド、ハイフンのみ使用可能です。"; continue; } if (!isValidEmail($email)) { $errors[] = "メールアドレス {$i} は無効です。"; continue; } $password = generateRandomPassword(); $userData[] = [ 'username' => $username, 'email' => $email, 'password' => $password ]; } } } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <title>パスワードフォーム</title> </head> <body> <h1>パスワードフォーム</h1> <form method="post"> <?php for ($i = 1; $i <= 5; $i++): ?> <div> <label for="username<?= $i ?>">ユーザーアカウント <?= $i ?>:</label> <input type="text" id="username<?= $i ?>" name="username<?= $i ?>"> <label for="email<?= $i ?>">メールアドレス:</label> <input type="email" id="email<?= $i ?>" name="email<?= $i ?>"> </div> <?php endfor; ?> <button type="submit">送信</button> </form> <?php if (!empty($errors)): ?> <div style="color: red;"> <?php foreach ($errors as $error): ?> <p><?= $error ?></p> <?php endforeach; ?> </div> <?php endif; ?> <?php if (!empty($userData)): ?> <h2>生成されたパスワード一覧</h2> <table border="1"> <tr> <th>ユーザーアカウント</th> <th>メールアドレス</th> <th>新しいパスワード</th> </tr> <?php foreach ($userData as $user): ?> <tr> <td><?= htmlspecialchars($user['username'], ENT_QUOTES) ?></td> <td><?= htmlspecialchars($user['email'], ENT_QUOTES) ?></td> <td><?= $user['password'] ?></td> </tr> <?php endforeach; ?> </table> <?php endif; ?> </body> </html>