当前位置:首页 > 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()添加随机像素点:

php实现图片验证码

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头为图像类型后输出,最后销毁图像资源释放内存:

php实现图片验证码

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('验证码错误');
}

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

相关文章

css网页制作漂浮图片

css网页制作漂浮图片

使用CSS实现漂浮图片效果 通过CSS的animation属性和@keyframes规则可以轻松实现图片漂浮效果。以下是几种常见实现方式: 基础漂浮动画 通过关键帧定义图片的垂直移动,模拟漂浮感:…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

vue实现图片编辑

vue实现图片编辑

Vue实现图片编辑的方法 使用第三方库vue-cropper 安装vue-cropper库: npm install vue-cropperjs 在Vue组件中使用: <template&g…

js 实现图片 放大

js 实现图片 放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性可以实现图片的平滑放大效果。结合 JavaScript 监听鼠标事件控制放大状态: con…

vue实现生成图片

vue实现生成图片

Vue 实现生成图片的方法 使用 html2canvas 库 html2canvas 是一个流行的库,可以将 DOM 元素转换为 Canvas,进而生成图片。适用于 Vue 项目。 安装 html2…

vue实现打印图片

vue实现打印图片

实现图片打印的基本思路 在Vue中实现图片打印功能,通常需要借助浏览器原生的打印API以及CSS控制打印样式。核心步骤包括创建一个隐藏的打印容器,将图片放入其中,然后触发浏览器的打印对话框。 创建打…