当前位置:首页 > PHP

php实现变色验证码

2026-01-29 06:38:20PHP

生成随机验证码

使用PHP的rand()mt_rand()函数生成随机字符串作为验证码。可以组合数字和字母增加复杂度。

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$code = '';
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[mt_rand(0, strlen($chars) - 1)];
}

创建画布并设置背景

使用imagecreatetruecolor()函数创建画布,设置背景色为白色或其他浅色。

$width = 100;
$height = 30;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);

添加干扰元素

在画布上添加干扰线或干扰点,防止机器识别。使用随机颜色和位置绘制线条或点。

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

for ($i = 0; $i < 50; $i++) {
    $color = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
    imagesetpixel($image, mt_rand(0, $width), mt_rand(0, $height), $color);
}

绘制变色验证码

将验证码字符绘制到画布上,每个字符使用不同的颜色和位置。

for ($i = 0; $i < strlen($code); $i++) {
    $charColor = imagecolorallocate($image, mt_rand(0, 150), mt_rand(0, 150), mt_rand(0, 150));
    $x = ($width / strlen($code)) * $i + mt_rand(5, 10);
    $y = mt_rand(5, $height - 15);
    imagestring($image, 5, $x, $y, $code[$i], $charColor);
}

输出图像并保存验证码

将图像输出为PNG或JPEG格式,同时将验证码存入Session以便后续验证。

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

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

完整代码示例

以下是一个完整的PHP变色验证码生成代码:

<?php
session_start();

$chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$code = '';
for ($i = 0; $i < 4; $i++) {
    $code .= $chars[mt_rand(0, strlen($chars) - 1)];
}

$width = 100;
$height = 30;
$image = imagecreatetruecolor($width, $height);
$bgColor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgColor);

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

for ($i = 0; $i < 50; $i++) {
    $color = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
    imagesetpixel($image, mt_rand(0, $width), mt_rand(0, $height), $color);
}

for ($i = 0; $i < strlen($code); $i++) {
    $charColor = imagecolorallocate($image, mt_rand(0, 150), mt_rand(0, 150), mt_rand(0, 150));
    $x = ($width / strlen($code)) * $i + mt_rand(5, 10);
    $y = mt_rand(5, $height - 15);
    imagestring($image, 5, $x, $y, $code[$i], $charColor);
}

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

$_SESSION['captcha'] = $code;
?>

验证码验证

在表单提交时,通过比较Session中的验证码和用户输入的值来验证。

php实现变色验证码

session_start();
if ($_POST['captcha'] === $_SESSION['captcha']) {
    echo '验证码正确';
} else {
    echo '验证码错误';
}

通过以上步骤,可以实现一个简单的变色验证码功能,有效防止自动化工具的攻击。

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

相关文章

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…

php变量的实现

php变量的实现

PHP变量的实现机制 PHP变量的实现基于Zend引擎的底层数据结构。核心结构体zval用于存储变量类型和值,其设计允许动态类型转换和高效内存管理。 zval结构体 PHP变量通过zval结构体实现…

php 实现md5

php 实现md5

使用 PHP 内置函数实现 MD5 PHP 提供了 md5() 函数,可以直接计算字符串的 MD5 哈希值。该函数接受一个字符串参数,返回 32 字符的十六进制哈希值。 $string = "H…

php实现批量删除

php实现批量删除

PHP 实现批量删除的方法 表单设计与前端交互 在 HTML 表单中使用复选框(checkbox)让用户选择要删除的项。每个复选框的 name 属性设置为数组形式(如 items[]),以便 PHP…