0

0

PHP怎么生成验证码图片_PHP创建图片验证码方法【操作】

星夢妙者

星夢妙者

发布时间:2026-02-09 10:37:26

|

493人浏览过

|

来源于php中文网

原创

PHP实现验证码需动态生成图片并校验,方法包括:一、GD库手动绘图;二、Session存值+内存流输出;三、封装可配置类;四、Base64内联嵌入;五、集成SimpleCaptcha库。

php怎么生成验证码图片_php创建图片验证码方法【操作】

如果需要在PHP网页中实现用户身份验证,防止机器人自动提交表单,则需动态生成包含随机字符的图片验证码。以下是几种可行的操作方法:

一、使用GD库直接绘制验证码图片

该方法通过PHP内置的GD图像处理扩展,手动创建画布、设置字体、绘制背景与干扰元素,并将随机字符串写入图像。要求服务器已启用GD扩展且支持TrueType字体。

1、启用GD扩展:确认php.ini中取消注释extension=gd或extension=php_gd2.dll,并重启Web服务。

2、生成4位随机字符串:使用mt_rand()与str_shuffle()组合生成字母数字混合字符,排除易混淆字符如0、O、l、I。

立即学习PHP免费学习笔记(深入)”;

3、创建图像资源:调用imagecreate(120, 40)创建宽120px、高40px的画布。

4、分配颜色:使用imagecolorallocate()定义背景色(浅灰)、文字色(深蓝)及干扰线色(浅红)。

5、填充背景:使用imagefilledrectangle()绘制纯色背景矩形。

6、绘制干扰线条:循环调用imageline(),参数使用mt_rand()生成随机起点与终点坐标。

7、写入验证码文本:使用imagettftext()配合绝对路径.ttf字体文件,逐字符定位绘制,x坐标按字符宽度偏移。

8、设置HTTP头并输出图像:header('Content-Type: image/png')后调用imagepng()输出,最后imagedestroy()释放资源。

二、使用Session保存验证码值并输出图像流

该方法将生成的验证码字符串存入$_SESSION,确保后续表单提交时可比对,同时以内存图像流方式输出,避免临时文件写入,提升安全性与效率。

1、开启Session:在脚本开头调用session_start(),确保会话可用。

2、生成6位验证码:使用range()与array_rand()从大小写字母+数字中抽取6个唯一字符,implode()拼接成字符串。

3、存入Session:执行$_SESSION['captcha_code'] = strtolower($code),统一转小写便于校验。

4、创建真彩色图像:调用imagecreatetruecolor(130, 45)获得高质量画布。

5、抗锯齿处理:启用imageantialias($image, true)使文字边缘更平滑。

6、添加噪点:嵌套循环调用imagesetpixel(),以5%概率在随机坐标绘制单像素点。

7、旋转字符:对每个字符单独调用imagettftext(),角度设为mt_rand(-15, 15),x坐标累加字符宽度。

8、输出PNG流:设置header('Content-Type: image/png'),调用imagepng($image, null)直接输出至浏览器

三、封装为可复用的验证码类

将验证码生成逻辑封装为独立类,支持配置长度、尺寸、字体路径、干扰强度等参数,便于多处调用且降低耦合度。

1、定义CaptchaGenerator类:声明private属性$width、$height、$length、$fontPath、$code。

OmniAudio
OmniAudio

OmniAudio 是一款通过 AI 支持将网页、Word 文档、Gmail 内容、文本片段、视频音频文件都转换为音频播客,并生成可在常见 Podcast ap

下载

2、构造函数接收配置数组:使用array_merge()合并默认参数,强制检查$fontPath是否存在且可读。

3、实现generateCode()方法:基于random_int()生成密码学安全随机字符,过滤掉易混淆集。

4、实现createImage()方法:内部调用imagecreatetruecolor()、分配颜色、绘制圆角矩形背景、添加波浪形干扰曲线(imagearc()模拟)。

5、实现output()方法:先调用session_start(),再$_SESSION['captcha'] = $this->code,最后输出图像并exit。

6、在页面中实例化:new CaptchaGenerator(['length' => 5, 'width' => 140])->output();

四、使用Base64编码内联输出验证码

该方法不依赖单独图片请求,将生成的PNG图像编码为Base64字符串,直接嵌入HTML img标签的src属性中,适用于无服务端图片路由的静态环境。

1、创建图像资源后暂存于内存:使用imagepng($image, $output)将图像数据写入变量$output而非文件。

2、编码为Base64:执行$base64 = base64_encode($output)。

3、拼接data URI:构造字符串$dataUri = 'data:image/png;base64,' . $base64。

4、返回JSON响应:设置header('Content-Type: application/json'),输出json_encode(['status' => 'success', 'captcha_img' => $dataUri])。

5、前端AJAX获取:JavaScript调用fetch()获取该接口,解析JSON后设置document.getElementById('captcha').src = data.captcha_img。

6、同步Session值:在返回JSON前仍需执行$_SESSION['captcha_code'] = $code,供后端校验使用。

五、集成SimpleCaptcha第三方库

采用轻量级Composer包simple-captcha,避免重复造轮子,提供预设样式、中文支持及防绕过机制,适合快速集成场景。

1、安装依赖:在项目根目录执行composer require mewebstudio/simple-captcha。

2、引入自动加载:require_once 'vendor/autoload.php';

3、配置参数:新建$config = ['backgrounds' => ['#ffffff'], 'fonts' => ['path/to/arial.ttf'], 'length' => 4];

4、实例化生成器:$captcha = new \Mews\Captcha\CaptchaBuilder($config);

5、生成图像并获取代码:$captcha->build(); $code = $captcha->getPhrase();

6、存储至Session:$_SESSION['captcha_simple'] = $code;

7、输出图像:header('Content-Type: image/jpeg'); $captcha->output();

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
composer是什么插件
composer是什么插件

Composer是一个PHP的依赖管理工具,它可以帮助开发者在PHP项目中管理和安装依赖的库文件。Composer通过一个中央化的存储库来管理所有的依赖库文件,这个存储库包含了各种可用的依赖库的信息和版本信息。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

158

2023.12.25

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

433

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

543

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

315

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

79

2025.09.10

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

163

2023.06.14

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

162

2023.08.31

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

118

2023.11.15

Golang处理数据库错误教程合集
Golang处理数据库错误教程合集

本专题整合了Golang数据库错误处理方法、技巧、管理策略相关内容,阅读专题下面的文章了解更多详细内容。

98

2026.02.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11.3万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号