当前位置:首页 > PHP

php实现变色验证码

2026-02-28 03:50:08PHP

生成随机验证码字符串

使用rand()mt_rand()生成随机数字/字母组合,例如4-6位字符。可结合array_merge()合并数字和字母数组,再通过shuffle()打乱顺序。

$chars = array_merge(range(0,9), range('a','z'), range('A','Z'));
shuffle($chars);
$code = implode('', array_slice($chars, 0, 6)); // 取6位

创建画布并设置背景

使用imagecreatetruecolor()创建指定大小的画布,用imagefill()填充背景色(通常为浅色)。

$width = 120;
$height = 40;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 240, 240, 240);
imagefill($image, 0, 0, $bgColor);

添加干扰元素

通过循环绘制随机干扰线、点或弧线,增加识别难度。颜色使用随机值生成。

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

输出变色验证码文字

每个字符使用不同的随机颜色,通过imagettftext()imagestring()写入画布。建议使用TTF字体增强效果。

$font = 'path/to/font.ttf'; // 需准备字体文件
for ($i=0; $i<strlen($code); $i++) {
    $color = imagecolorallocate($image, rand(0,150), rand(0,150), rand(0,150));
    imagettftext($image, 20, rand(-30,30), 10+$i*20, 30, $color, $font, $code[$i]);
}

输出图像并销毁资源

通过header()设置MIME类型后,用imagepng()输出图像,最后调用imagedestroy()释放内存。

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

存储验证码用于校验

将生成的验证码存入$_SESSION,便于后续表单提交时比对。

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

注意事项

  • 字体文件需提前放置到项目目录
  • 确保PHP已安装GD库(通过phpinfo()检查)
  • 验证码复杂度可通过调整干扰元素数量、字符扭曲程度控制
  • 实际使用时应结合表单提交的Session验证逻辑

php实现变色验证码

标签: 验证码php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('loca…

php实现注册

php实现注册

注册功能实现步骤 数据库准备 创建用户表,包含字段如id、username、password、email等。示例SQL: CREATE TABLE users ( id INT AUTO_…

php 实现文件下载

php 实现文件下载

实现文件下载的基本方法 使用 PHP 实现文件下载的核心是通过设置 HTTP 头部信息,强制浏览器将文件作为附件下载而非直接显示。以下是一个基础实现示例: $file_path = '/path/…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php 队列的实现

php 队列的实现

PHP 队列的实现方法 使用数据库实现队列 创建一个数据表存储队列任务,包含任务ID、状态、创建时间等字段。通过SQL语句实现任务的入队和出队操作。 // 入队操作 INSERT INTO que…

php实现伪静态

php实现伪静态

PHP 实现伪静态的方法 伪静态(URL Rewrite)是一种将动态URL转换为看似静态URL的技术,提升SEO友好性和用户体验。以下是几种常见的实现方式: 使用 Apache 的 mod_rew…