要使用PHP实现验证码,你可以使用GD库和Imagick扩展。以下是一个简单的示例,展示了如何创建一个带有噪点和干扰线的验证码图片:
-
首先,确保你的服务器已经安装了GD库和Imagick扩展。
-
创建一个名为
captcha.php
的文件,并在其中添加以下代码:
$length = 6) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
// 创建验证码图片
function createCaptchaImage($text) {
$width = 150;
$height = 60;
$image = imagecreatetruecolor($width, $height);
// 设置背景颜色
$backgroundColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $backgroundColor);
// 设置字体颜色
$textColor = imagecolorallocate($image, 0, 0, 0);
// 设置字体大小
$fontSize = 24;
// 计算文本的边界框
$textWidth = imagefontwidth($fontSize, $text);
$textHeight = imagefontheight($fontSize, $text);
// 定位文本位置
$x = ($width - $textWidth) / 2;
$y = ($height - $textHeight) / 2 + $fontSize;
// 在图片上绘制文本
imagettftext($image, $fontSize, 0, $x, $y, $textColor, 'arial.ttf', $text);
// 添加噪点
for ($i = 0; $i < 100; $i++) {
$pointX = rand(0, $width - 1);
$pointY = rand(0, $height - 1);
imagesetpixel($image, $pointX, $pointY, imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)));
}
// 添加干扰线
for ($i = 0; $i < 5; $i++) {
$lineStartX = rand(0, $width - 1);
$lineEndX = rand(0, $width - 1);
$lineY = rand(0, $height - 1);
imageline($image, $lineStartX, $lineY, $lineEndX, $lineY, imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255)));
}
return $image;
}
// 输出验证码图片
function outputCaptchaImage() {
$text = generateRandomString();
$image = createCaptchaImage($text);
header('Content-type: image/png');
imagepng($image);
// 将验证码文本保存到会话中
$_SESSION['captcha'] = $text;
// 销毁图片资源
imagedestroy($image);
}
outputCaptchaImage();
?>
- 在你的HTML文件中,添加一个
标签来显示验证码图片:
验证码示例 请输入验证码
- 创建一个名为
submit_captcha.php
的文件,用于处理表单提交:
现在,当用户访问你的网站并输入验证码时,submit_captcha.php
文件将检查用户输入的验证码是否与会话中存储的验证码匹配。如果匹配,用户将被视为合法用户。