当前位置:首页 > 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存储的值:

php实现图片验证码

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

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

相关文章

网页设计制作css图片

网页设计制作css图片

CSS图片处理基础方法 在网页设计中,CSS可以控制图片的尺寸、位置、边框等样式属性。通过<img>标签或背景图方式引入图片后,使用CSS属性进行调整。 img { width: 1…

js实现图片轮播

js实现图片轮播

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

vue实现图片编辑

vue实现图片编辑

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

js图片轮播的实现

js图片轮播的实现

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

vue实现图片滚动

vue实现图片滚动

实现图片滚动的 Vue 组件 使用 Vue 实现图片滚动效果可以通过自定义组件或第三方库完成。以下是两种常见方法: 方法一:使用 CSS 动画和 Vue 动态绑定 通过 Vue 的 v-for 和…

js实现图片加载

js实现图片加载

使用Image对象加载图片 通过JavaScript的Image对象可以动态加载图片,适用于需要预加载或动态插入图片的场景。 const img = new Image(); img.src =…