🗣 Wd提问: php生成验证码
🤖 Ai回答: 以下是使用 PHP 生成验证码的完整示例代码,包含图片生成、干扰元素和 Session 存储验证码:
php
<?php
session_start();
header('Content-Type: image/png');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');
header('Expires: 0');
// 配置参数
$width = 120;
$height = 40;
$characters = 4;
$fontSize = 20;
$fontFile = 'arial.ttf'; // 确保字体文件存在或替换为你的字体路径
// 创建画布
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);
// 添加干扰线
for ($i = 0; $i < 6; $i++) {
$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),
$color
);
}
// 添加干扰点
for ($i = 0; $i < 100; $i++) {
$color = imagecolorallocate($image, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
imagesetpixel($image, mt_rand(0, $width), mt_rand(0, $height), $color);
}
// 生成随机验证码
$allowedChars = 'ABCDEFGHJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789'; // 排除易混淆字符
$code = '';
for ($i = 0; $i < $characters; $i++) {
$code .= $allowedChars[mt_rand(0, strlen($allowedChars) 1)];
}
$_SESSION['captcha'] = $code;
// 绘制验证码文本
$textColor = imagecolorallocate($image, mt_rand(0, 80), mt_rand(0, 80), mt_rand(0, 80));
$x = ($width strlen($code) * $fontSize) / 2;
$y = $height ($height $fontSize)/2;
imagettftext($image, $fontSize, 0, $x, $y, $textColor, $fontFile, $code);
// 输出并销毁资源
imagepng($image);
imagedestroy($image);
?
使用说明:
1、创建验证码图片
在页面中通过 `<img` 标签引用:
html
<img src=captcha.php alt=验证码 style=width:120px;height:40px;
2、验证验证码
在表单提交时检查用户输入:
php
if ($_POST['user_input'] == $_SESSION['captcha']) {
echo 验证通过!;
} else {
echo 验证码错误!;
}
关键特性:
1、安全优化
排除易混淆字符(如 0/O, 1/I, l/L)
使用 `mt_rand()` 替代 `rand()` 生成更安全的随机数
设置 HTTP 头防止缓存
2、干扰元素
随机干扰线和干扰点
随机背景色和字体颜色
3、可定制性
可调整验证码长度($characters)
可修改字体文件路径($fontFile)
可调整图片尺寸($width, $height)
注意事项:
1、确保服务器已启用 GD 库
2、字体文件路径需要正确(如果使用 TrueType 字体)
3、请将验证码存储在 Session 中并设置有效期
4、建议添加噪点时控制数量以免影响可读性
扩展功能建议:
1、添加验证码有效期(在 Session 中记录生成时间)
2、实现验证码倒计时刷新功能
3、添加图片扭曲效果
4、支持动态调整验证码难度
如果需要更简单的版本(不使用 TrueType 字体),可以将字体相关代码替换为:
php
// 替换 imagettftext 部分为:
imagestring($image, 5, $x, $y, $code, $textColor);
但这样会降低验证码的美观度和防破解能力。
📣 商家广告:





0
IP地址: 107.199.166.233
搜索次数: 2
提问时间: 2025-11-04 00:00:31
🛒 域名购买:
9-9.net
wg.gs
che.gs
62.gs
3.ln.cn
jgqg.cn
wq.gs
84.gs
73.gold
dxgm.cn
❓️ 热门提问:
免费vps永久
云服务器企业认证
电梯机房是什么
vps镜像服务器恢复
云空间可以清理吗
publ.pt域名
市场研究机构idc
站群SEO网站SEO检测
海外服务器排名
do免费vps
豌豆Ai站群搜索引擎系统
🌐 域名评估:
trump.sd.cn
catl.hn.cn
jmum.cn
dzfj.cn
xphone.bond
fxeel.cn
沈宏志.中国
85.com.hk
rm.chat
esz.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
租用vps
검색
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。