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

PHP 實現 GIF 動畫驗證碼:完整原碼與部署指南

     編輯:PHP 綜合知識

動態 GIF 驗證碼能有效防範機器識別,提升安全性。本文提供完整實現方案,包含幀動畫生成、干擾元素繪製、GIF 編碼輸出三大核心模組。

核心實現架構

  1. ImageCode():主入口,生成 32 幀動畫序列
  2. GIFEncoder 類:處理 GIF89a 格式封裝、幀延遲、循環控制
  3. 驗證碼調用腳本:Session 管理與前端整合

關鍵代碼解析

1. 動畫幀生成邏輯

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();
}

2. GIFEncoder 核心功能

  • 支援二進制/URL 兩種輸入模式
  • 自動處理全域/局部色表合併
  • 圖形控制擴展塊(延遲、處置方式)
  • Netscape 2.0 循環擴展塊

部署三步驟

步驟一:建立 ImageCode.php

包含上述兩個核心類/函數,確保 GD 擴展已啟用。

步驟二:建立 yzimg.php(驗證碼入口)

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 實現,無需額外擴展即可部署,適合快速整合至舊專案或學習動畫生成原理。

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