動態 GIF 驗證碼能有效防範機器識別,提升安全性。本文提供完整實現方案,包含幀動畫生成、干擾元素繪製、GIF 編碼輸出三大核心模組。
for ($i = 0; $i < 32; $i++) {
$image = imagecreate($width, $height);
// 背景填充、色盤構建
if ($i > 0) { // 第0幀不顯示文字,增強反識別性
foreach (str_split($authstr) as $k => $char) {
$color = $colorList[mt_rand(0, count($colorList)-1)];
imagestring($image, 6, $space * $k, rand(0,4), $char, $color);
}
}
// 添加噪點與干擾線
imagegif($image);
$frames[] = ob_get_clean();
}
包含上述兩個核心類/函數,確保 GD 擴展已啟用。
session_start();
require_once 'ImageCode.php';
$chars = 'abcdefghjkmnpqrstuvwxyzABCDEFGHJKLMNPRSTUVWXYZ23456789';
$code = '';
for ($i = 0; $i < 4; $i++) {
$code .= $chars[mt_rand(0, strlen($chars)-1)];
}
$_SESSION['yzm'] = $code;
ImageCode($code, 60); // 輸出 GIF 直接到瀏覽器
<input name="yzm" type="text" class="input" />
<img id="captcha" src="yzimg.php" onclick="this.src='yzimg.php?'+Math.random()"
title="點擊刷新" style="cursor:pointer; vertical-align:middle;" />
imagettftext() + TrueType 字體方案完整原碼已包含 GIFEncoder 純 PHP 實現,無需額外擴展即可部署,適合快速整合至舊專案或學習動畫生成原理。