當前位置: 首頁> 最新文章列表> 如何用PHP製作基礎圖像驗證碼並進行表單驗證

如何用PHP製作基礎圖像驗證碼並進行表單驗證

M66 2025-06-23

使用PHP實現基礎圖像驗證碼功能

圖像驗證碼廣泛應用於網站註冊、登錄、評論等場景,是提升表單安全性、抵禦自動腳本攻擊的重要手段。本文將帶你一步步實現一個簡單的PHP圖像驗證碼系統,依賴PHP的GD圖形庫完成圖像生成,並結合會話機製完成驗證碼驗證。

一、準備工作

在開始之前,請確認你的服務器環境中已經啟用了GD庫。 GD庫是PHP中處理圖形圖像的擴展模塊,用於動態創建圖像。可以通過執行phpinfo()來檢查是否啟用該擴展。

二、生成驗證碼圖片

創建一個名為captcha.php的文件,使用GD庫動態生成帶有隨機數字的圖像,並將生成的驗證碼值存入$_SESSION中,供後續驗證使用。

以下是驗證碼圖片的生成代碼:

 
<?php
session_start();

// 生成隨機的四位驗證碼
$code = rand(1000, 9999);

// 將驗證碼存儲到會話中
$_SESSION['captcha_code'] = $code;

// 創建圖像資源
$image = imagecreatetruecolor(120, 40);

// 設置背景顏色為白色
$bg_color = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bg_color);

// 添加干擾點
for ($i = 0; $i < 100; $i++) {
    $point_color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));
    imagesetpixel($image, rand(0, 120), rand(0, 40), $point_color);
}

// 設置文字顏色為黑色
$text_color = imagecolorallocate($image, 0, 0, 0);

// 繪製驗證碼文字(確保字體路徑正確)
imagettftext($image, 20, 0, 30, 30, $text_color, 'path/to/font.ttf', $code);

// 輸出圖像到瀏覽器
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>

三、顯示驗證碼圖片

在前端頁面中嵌入驗證碼圖像,可以使用以下方式調用captcha.php

 <img src="captcha.php" alt="驗證碼">

建議為圖片添加刷新功能,例如點擊圖片重新加載驗證碼,以增強用戶體驗。

四、驗證用戶輸入

在用戶提交表單時,需要將用戶輸入的驗證碼與會話中存儲的值進行比對,判斷是否輸入正確。以下是驗證代碼示例:

 
<?php
session_start();

if (isset($_POST['captcha'])) {
    $user_input = $_POST['captcha'];

    if ($user_input == $_SESSION['captcha_code']) {
        // 驗證成功,執行相應操作
    } else {
        // 驗證失敗,提示重新輸入
    }
}
?>

該邏輯適用於用戶註冊、登錄驗證等任何需要確認操作的表單場景。

總結

通過本篇教程,你已經了解了使用PHP與GD庫實現圖像驗證碼的基本方法。該方案通過生成包含隨機字符的圖像,結合Session機製完成服務端驗證,適合大多數中小型項目需求。

後續可在此基礎上進一步擴展,例如:

  • 增加驗證碼字符類型(數字+字母)

  • 添加圖形干擾線

  • 動態生成字體大小與角度

  • 加入驗證碼過期時間等

合理設計驗證碼不僅有助於防止惡意攻擊,還能提升系統整體安全性。