在網站開發過程中,為了防止自動化的惡意攻擊或者自動註冊,我們常常使用圖片驗證碼來進行驗證。本文將為大家展示如何利用PHP來生成和驗證圖片驗證碼,並提供了相關的代碼示例。
生成圖片驗證碼的核心在於生成一個隨機驗證碼字符串,並將其繪製到圖片上。下面是一個PHP代碼示例:
<?php
session_start();
// 聲明圖片尺寸
$image_width = 100;
$image_height = 40;
// 創建圖片資源
$image = imagecreatetruecolor($image_width, $image_height);
// 生成背景顏色
$bg_color = imagecolorallocate($image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
imagefill($image, 0, 0, $bg_color);
// 生成驗證碼字符串
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789';
$code = '';
for ($i = 0; $i < 4; $i++) {
$code .= $chars[mt_rand(0, strlen($chars) - 1)];
}
// 將驗證碼字符串保存到session中,用於後續驗證
$_SESSION['captcha'] = $code;
// 繪製驗證碼文字
$font_file = 'path_to_your_font.ttf'; // 替換為你自己的字體文件路徑
$text_color = imagecolorallocate($image, 0, 0, 0); // 文字顏色為黑色
imagettftext($image, 20, 0, 10, 30, $text_color, $font_file, $code);
// 輸出圖片
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);
?>
上述代碼首先通過imagecreatetruecolor函數創建一個指定寬度和高度的圖片資源。接著,通過imagecolorallocate函數生成背景顏色並填充整個圖片,最後用imagettftext函數在圖片上繪製驗證碼字符串,最後用imagepng函數輸出生成的圖片。
在驗證圖片驗證碼時,我們需要將用戶輸入的驗證碼與保存在session中的驗證碼進行比對。以下是驗證驗證碼的PHP代碼示例:
<?php
session_start();
// 獲取用戶輸入的驗證碼字符串
$user_input = $_POST['captcha'];
// 獲取保存在session中的驗證碼字符串
$server_code = $_SESSION['captcha'];
// 驗證用戶輸入的驗證碼與保存的驗證碼是否一致
if (strcasecmp($user_input, $server_code) === 0) {
// 驗證碼正確,執行相應的操作
echo '驗證碼正確';
} else {
// 驗證碼錯誤,提示用戶重新輸入
echo '驗證碼錯誤';
}
?>
上述代碼首先開啟session,然後通過$_POST數組獲取用戶輸入的驗證碼,再通過$_SESSION數組獲取保存在session中的驗證碼字符串。通過strcasecmp函數比較兩個字符串,如果匹配,則表示驗證碼正確,可以執行相應的操作;如果不匹配,則提示驗證碼錯誤。
通過上述兩段PHP代碼,我們可以成功實現圖片驗證碼的生成和驗證功能。生成驗證碼的代碼可以保存為一個獨立的文件,例如captcha.php,用戶請求時只需訪問該文件即可生成驗證碼。而驗證驗證碼的代碼則可以放置在表單提交的處理頁面中。
在實際應用中,除了上述功能外,你還可以根據需要增加一些安全措施,如添加干擾線、加密驗證碼等。