首先生成随机验证码字符串并存入session,然后使用GD库创建图像,设置背景色与干扰元素,绘制字符,最后输出图像并释放资源。

在PHP中生成验证码,通常使用GD库来绘制图像并添加干扰元素和随机字符。GD库是PHP内置的图像处理扩展,支持创建、操作和输出常见格式的图像,如PNG、JPEG等。
启用GD库
确保你的PHP环境已开启GD扩展。可以在php.ini中检查以下配置:
extension=gd
保存后重启Web服务器。通过phpinfo()函数查看是否已加载GD库。
立即学习“PHP免费学习笔记(深入)”;
生成验证码的基本步骤
实现一个简单的图像验证码包含以下几个关键环节:
- 生成随机字符串(字母+数字)
- 创建画布(图像资源)
- 设置背景色与干扰元素(点、线)
- 绘制验证码文字
- 输出图像并释放内存
完整示例代码
以下是一个可直接运行的PHP脚本,用于生成4位验证码图片:
// 启动session用于保存验证码值
session_start();
// 验证码长度
$length = 4;
// 字符范围
$chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
$captcha_text = '';
// 生成随机字符
for ($i = 0; $i < $length; $i++) {
$captcha_text .= $chars[mt_rand(0, strlen($chars) - 1)];
}
// 存入session
$_SESSION['captcha'] = $captcha_text;
// 创建画布
$width = 100;
$height = 40;
$image = imagecreate($width, $height);
// 分配颜色
$bg_color = imagecolorallocate($image, 240, 240, 240); // 背景色
$text_color = imagecolorallocate($image, mt_rand(50, 150), mt_rand(50, 150), mt_rand(50, 150)); // 文字色
// 添加干扰点
for ($i = 0; $i < 50; $i++) {
imagesetpixel($image, mt_rand(0, $width), mt_rand(0, $height), $text_color);
}
// 添加干扰线
for ($i = 0; $i < 3; $i++) {
$line_color = imagecolorallocate($image, mt_rand(100, 200), mt_rand(100, 200), mt_rand(100, 200));
imageline($image, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $line_color);
}
// 写入文本(使用内置字体)
for ($i = 0; $i < $length; $i++) {
$x = 10 + $i * 20;
$y = mt_rand(15, 25);
imagechar($image, 5, $x, $y, $captcha_text[$i], $text_color);
}
// 输出图像为PNG
header('Content-Type: image/png');
imagepng($image);
// 销毁图像资源
imagedestroy($image);
?>
使用说明
将上述代码保存为captcha.php,然后在HTML中这样引用:
用户提交表单时,对比输入值与$_SESSION['captcha']是否一致即可完成验证。
基本上就这些。不复杂但容易忽略细节,比如颜色分配顺序、session管理、干扰元素适量控制等,都会影响最终效果。











