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
函數輸出。
驗證圖片驗證碼需要與使用者輸入的驗證碼進行比較。以下是一個驗證圖片驗證碼的範例程式碼:
<?php session_start(); // 获取用户输入的验证码字符串 $user_input = $_POST['captcha']; // 获取保存在session中的验证码字符串 $server_code = $_SESSION['captcha']; // 验证用户输入的验证码与保存的验证码是否一致 if (strcasecmp($user_input, $server_code) === 0) { // 验证码正确,执行相应的操作 // ... echo "验证码正确"; } else { // 验证码错误,提示用户重新输入 echo "验证码错误"; } ?>
在上述程式碼中,首先使用session_start
函數開啟session,然後透過$_POST
超全域數組取得用戶輸入的驗證碼字串,再使用$_SESSION
超全域陣列取得儲存在session中的驗證碼字串。最後,透過strcasecmp
函數比較兩個字串是否相等,如果相等則表示驗證碼正確,執行對應的操作,如果不相等則表示驗證碼錯誤,提示使用者重新輸入。
透過以上兩段程式碼,我們可以實現圖片驗證碼的產生和驗證。可以將產生圖片驗證碼的程式碼儲存為一個獨立的文件,例如captcha.php
,當需要產生驗證碼時,直接存取該文件即可。而驗證圖片驗證碼的程式碼則可以放置在特定的表單提交處理頁面中。
希望本文的範例程式碼能夠幫助你實現圖片驗證碼的產生和驗證。當然,在實際應用中,你可能還需要增加一些安全性措施,例如添加干擾線,對驗證碼進行加密等。
以上是PHP實作圖片驗證碼的產生與驗證的詳細內容。更多資訊請關注PHP中文網其他相關文章!