当前位置:首页 > 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);

添加干扰元素

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

php实现变色验证码

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以便后续验证。

php实现变色验证码

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中的验证码和用户输入的值来验证。

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

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

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

相关文章

php实现打印功能

php实现打印功能

PHP 实现打印功能的方法 PHP 可以通过多种方式实现打印功能,具体取决于打印的目标(如打印机、PDF、网页等)和需求(如直接打印、生成打印预览等)。以下是几种常见的实现方式: 使用 JavaS…

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas…

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('lo…

php实现

php实现

PHP 实现的基本方法 PHP 是一种服务器端脚本语言,广泛用于 Web 开发。以下是 PHP 实现的一些常见方法。 变量与数据类型 PHP 变量以 $ 开头,支持多种数据类型: $nam…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 &l…

php 实现接口

php 实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不包含具体的实现。类可以实现(implement)接口,并必须实现接口中定义的所有方法。 定义接口 接口…