原版 yzImg() 使用 GD 繪製 4 字元驗證碼,背景為 26 條直線干擾。關鍵問題:字元來源僅為數字 mt_rand(1,9),定義的字母陣列 $Str[0..2] 從未使用。
yzImgNumRand(4)。imagechar() 固定字體大小。function yzImgNumRand($length = 4) {
mt_srand((double)microtime() * 1000000); // PHP 4.2+ 可省略
$chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
$rand = '';
for ($i = 0; $i < $length; $i++) {
$rand .= $chars[mt_rand(0, strlen($chars) - 1)];
}
return $rand;
}
imagettftext() + TTF 字體,支援抗鋸齒、旋轉、變形,大幅提升機器識別難度。header('Cache-Control: no-store, must-revalidate'); 防止瀏覽器快取舊圖。PHP168 原版驗證碼邏輯清晰但強度不足,稍加修改即可支援字母數字混合,結合 TTF 字體與幾何變形可滿足多數中小型專案安全需求。