当前位置:首页 > PHP

php实现图片验证码

2026-01-28 23:54:21PHP

生成随机验证码字符串

使用PHP的rand()mt_rand()函数生成随机数,并通过字符串拼接形成验证码。常见做法是混合数字和字母:

$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$code = substr(str_shuffle($chars), 0, 4);

创建画布并设置背景

使用imagecreatetruecolor()创建指定大小的画布,建议尺寸为80x30像素。通过imagecolorallocate()设置背景色和文本颜色:

$width = 80;
$height = 30;
$im = imagecreatetruecolor($width, $height);
$bg = imagecolorallocate($im, 240, 240, 240);
imagefill($im, 0, 0, $bg);

添加干扰元素

为增强安全性,可添加干扰线和噪点。使用imageline()绘制随机线段,imagesetpixel()添加随机像素点:

for ($i = 0; $i < 5; $i++) {
    $color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
    imageline($im, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);
}

绘制验证码文本

使用imagestring()imagettftext()(需字体文件)将验证码文本绘制到画布。建议随机旋转字符角度并分散位置:

for ($i = 0; $i < strlen($code); $i++) {
    $color = imagecolorallocate($im, rand(0, 120), rand(0, 120), rand(0, 120));
    $angle = rand(-15, 15);
    imagettftext($im, 16, $angle, 15 + $i * 15, 25, $color, 'path/to/font.ttf', $code[$i]);
}

输出并销毁图像

设置HTTP头为图像类型后输出,最后销毁图像资源释放内存:

header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

会话存储验证码

将生成的验证码存入$_SESSION供后续验证使用:

session_start();
$_SESSION['captcha'] = $code;

完整示例代码

session_start();
$chars = 'ABCDEFGHJKLMNPQRSTUVWXYZ23456789';
$code = substr(str_shuffle($chars), 0, 4);

$width = 80;
$height = 30;
$im = imagecreatetruecolor($width, $height);
$bg = imagecolorallocate($im, 240, 240, 240);
imagefill($im, 0, 0, $bg);

for ($i = 0; $i < 5; $i++) {
    $color = imagecolorallocate($im, rand(0, 255), rand(0, 255), rand(0, 255));
    imageline($im, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);
}

for ($i = 0; $i < strlen($code); $i++) {
    $color = imagecolorallocate($im, rand(0, 120), rand(0, 120), rand(0, 120));
    imagestring($im, 5, 5 + $i * 20, 5, $code[$i], $color);
}

$_SESSION['captcha'] = $code;
header('Content-type: image/png');
imagepng($im);
imagedestroy($im);

验证码校验方法

在表单提交处理页面对比用户输入与session存储的值:

session_start();
if ($_POST['captcha'] !== $_SESSION['captcha']) {
    die('验证码错误');
}

php实现图片验证码

标签: 验证码图片
分享给朋友:

相关文章

jquery图片

jquery图片

jQuery 图片操作 jQuery 提供了多种方法来处理图片,包括加载、显示、隐藏、动画效果等。以下是一些常见的 jQuery 图片操作方法: 动态加载图片 使用 jQuery 的 attr()…

uniapp图形验证码

uniapp图形验证码

uniapp 图形验证码实现方法 在 uniapp 中实现图形验证码功能可以通过多种方式完成,以下是几种常见的实现方案: 使用第三方验证码服务 接入第三方验证码服务如极验、腾讯云验证码等,这些服务…

vue实现图片预览

vue实现图片预览

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方库如viewer.js或vue-photo-preview,以及自…

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from '.…

vue图片实现多选

vue图片实现多选

Vue 图片多选实现方法 在 Vue 中实现图片多选功能可以通过以下几种方式完成,具体取决于项目需求和复杂度。 使用 v-model 和数组存储选中状态 通过 v-model 绑定一个数组来记录选…

js图片轮播的实现

js图片轮播的实现

基础图片轮播实现 使用HTML、CSS和JavaScript实现一个简单的图片轮播效果。HTML部分定义轮播容器和图片,CSS负责样式和过渡效果,JavaScript处理逻辑。 <div cl…