メールのパスワード設定一覧を作るときに半角英数で、メールアドレスが有効で、メールアドレスとは別にアカウントがあります。
いろんなチェックをして、生成して、配らないといけません。結構面倒ですし、エラーも多いので、こちらでプログラムを書いてみました。
追加仕様:(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>