首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 批量產生隨機使用者名稱:字典組合、合併、去重、長度過濾三階段流程

     編輯:PHP 綜合知識

整體架構

  1. 1.php:從多字典隨機抽樣組合,產生多個中繼檔案。
  2. 2.php:合併所有中繼檔案為單一大檔。
  3. 3.php:去重、長度過濾 (6-16 字元)、輸出最終名單。

1.php - 隨機組合

<?php
$file1 = "./Words.dic";        // 基礎詞庫
$file2 = "./common_pass_mini.dic"; // 後綴詞庫
$file3 = "./Sys_Month_Date.Dic";   // 日期詞庫
$rfile = "./5.dic";            // 輸出
$n = 2000;                     // 產生筆數

$base = file($file1, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$ext  = file($file2, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$ext2 = file($file3, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$out = [];
for ($i = 0; $i < $n; $i++) {
    $name = $base[array_rand($base)] . "_" . $ext[array_rand($ext)];
    $out[] = $name;
}
file_put_contents($rfile, implode("\r\n", $out));
echo "Write user succeed!";
?>

2.php - 合併檔案

<?php
$outFile = "./result.dic";
$fp = fopen($outFile, 'a');
for ($i = 1; $i <= 5; $i++) {
    fwrite($fp, file_get_contents("$i.dic"));
}
for ($i = 10; $i <= 11; $i++) {
    fwrite($fp, file_get_contents("$i.dic"));
}
fclose($fp);
echo "Write Succeed";
?>

3.php - 去重與過濾

<?php
$src  = "./result.dic";
$dest = "./target.dic";

$lines = file($src, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$lines = array_unique($lines);

$filtered = array_filter($lines, fn($s) => strlen($s) >= 6 && strlen($s) <= 16);

file_put_contents($dest, implode("", $filtered));
echo "Write succeed";
?>

效能與改進提示

  • file() 會將整檔讀入記憶體,大檔案請改用 SplFileObject 逐行處理或資料庫匯入。
  • array_unique() 記憶體佔用大,百萬筆以上建議用 sort -u 系統指令或資料庫 DISTINCT。
  • 隨機組合可引入更豐富字典 (單字、拼音、常用密碼) 並加入數字、特殊字元變化,提升多樣性。
  • 最終名單可直接匯入資料庫 users 表並建立唯一索引,避免應用層再次去重。

結語

三階段管道化流程 (產生 → 合併 → 清洗) 結構清晰,易於擴充與維護。實務上可整合為單一 CLI 指令並加入進度條、錯誤重試、日誌記錄,構建健壯的批量帳號產生系統。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved