可利用GD库实现PHP验证码功能:先确认GD扩展已启用,再生成随机字符存入session,接着创建画布、填充背景,添加噪点和干扰线,绘制带旋转偏移的验证码字符,最后输出PNG图像并释放资源。

如果您希望在PHP网站中实现用户登录或注册时的验证码功能,则可以利用GD图形库动态生成图像验证码。以下是基于GD库生成验证码的具体操作步骤:
一、检查GD库是否启用
GD库是PHP生成图像的基础扩展,必须确保其已安装并启用,否则所有图像绘制函数将无法执行。
1、创建一个PHP文件,例如info.php,写入并访问该页面。
2、在浏览器页面中搜索gd,确认“GD Support”显示为enabled。
立即学习“PHP免费学习笔记(深入)”;
3、若未启用,需编辑php.ini文件,取消;extension=gd前的分号,并重启Web服务器。
二、生成随机字符验证码
验证码的核心是生成不可预测的随机字符串,通常由数字与大小写字母混合组成,以增强识别难度。
1、定义字符集,例如$chars = '23456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz';(排除易混淆字符如0、O、I、l)。
2、使用str_shuffle()打乱字符顺序,再用substr()截取4–6位作为验证码值。
3、将生成的验证码字符串存入session,例如$_SESSION['captcha_code'] = $code;,供后续表单验证比对。
三、创建画布并设置背景色
GD库通过内存中的图像资源进行绘图,需先分配画布空间,并填充背景色以避免透明干扰。
1、调用imagecreatetruecolor(120, 40)创建宽120像素、高40像素的真彩色画布。
2、使用imagecolorallocate()分配背景色,例如$bg = imagecolorallocate($image, 240, 240, 240);。
3、调用imagefill($image, 0, 0, $bg)从坐标(0,0)开始填充整个画布。
四、绘制干扰元素增强防识别能力
添加噪点和干扰线可有效防止OCR工具自动识别,同时保持人类可读性。
1、使用循环调用imagesetpixel()在随机坐标绘制单像素点,颜色从浅灰到深灰中随机选取。
2、调用imageline()绘制多条斜线,起始与终止坐标均使用rand()生成,线条颜色略深于背景。
3、每条干扰线宽度设为1,避免过度覆盖字符区域,确保文字主体清晰可辨。
五、绘制验证码字符并添加微变形
直接水平排列字符易被程序识别,加入轻微旋转和位置偏移能提升安全性。
1、遍历验证码字符串,对每个字符调用imagettftext()(需指定TrueType字体文件路径)。
2、为每个字符设置随机Y轴偏移量(±5像素)和±5度内的旋转角度。
3、字符颜色使用imagecolorallocate()分配深灰或蓝灰系(如50, 50, 50),避免与背景色过近。
六、输出图像并释放资源
完成绘制后需将图像输出至浏览器,并立即销毁资源防止内存泄漏。
1、设置HTTP响应头:header('Content-Type: image/png');。
2、调用imagepng($image)将图像以PNG格式输出。
3、依次调用imagedestroy($image)释放图像资源,结束脚本运行。











