一个经典的PHP验证码类分享

让我详细讲解一下“一个经典的PHP验证码类分享”的完整攻略。

简介

在网站开发过程中,为了防止恶意的机器人或爬虫攻击,我们常常需要使用验证码来进行验证。本文将分享一个基于PHP的验证码类的实现方式,这个验证码类可以生成包含数字和字母的图片,有效地进行验证。

代码实现

步骤一:基础设置

在生成验证码图像之前,我们需要先基于PHP代码进行一些设置,例如生成一个随机字符串并使用某个字体。

<?php
class Captcha{
    //定义图像的宽度、高度和生成的验证码长度
    private $width = 150;
    private $height = 40;
    private $length = 4;
    //定义字体的路径
    private $font = './Roboto/Roboto-Bold.ttf';

    public function generate() {
        //生成随机字符串
        $randStr = substr(sha1(mt_rand()), 17, $this->length);
        //保存随机字符串,便于后续验证
        $_SESSION['captcha'] = $randStr;
        //创建图像并设定背景色
        $image = imagecreatetruecolor($this->width, $this->height);
        $bgColor = imagecolorallocate($image, 235, 236, 237);
        imagefill($image, 0, 0, $bgColor);
    }
}
?>

步骤二:绘制字符和干扰线

有了基础设置之后,我们就可以进行字符的绘制和干扰线的绘制了。在字符的绘制中,我们需要指定字体文件及字符颜色,然后随机生成每个字符的位置进行绘制。在干扰线的绘制中,我们可以先生成一些随机的线条位置和颜色,然后使用imageline函数进行绘制。

<?php
class Captcha{
    //...

    public function generate() {
        //...

        //定义字符的颜色和绘制位置
        $textColor = imagecolorallocate($image, 0, 0, 0);
        $startX = ($this->width - 20 * $this->length) / 2;
        $startY = ($this->height - 30) / 2;

        //生成字符并进行绘制
        for($i = 0; $i < $this->length; $i++) {
            $char = substr($randStr, $i, 1);
            $x = $startX + $i * 20 + mt_rand(-5, 5);
            $y = $startY + mt_rand(-5, 5);
            imagettftext($image, 20, mt_rand(-20, 20), $x, $y, $textColor, $this->font, $char);
        }

        //定义干扰线的颜色和长度,进行绘制
        for($i = 0; $i < 5; $i++) {
            $lineColor = imagecolorallocate($image, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
            $startX = mt_rand(0, $this->width);
            $startY = mt_rand(0, $this->height);
            $endX = mt_rand(0, $this->width);
            $endY = mt_rand(0, $this->height);
            imageline($image, $startX, $startY, $endX, $endY, $lineColor);
        }

        //输出图像并销毁
        header('Content-Type: image/png');
        imagepng($image);
        imagedestroy($image);
    }
}
?>

步骤三:进行验证

生成验证码图片并输出之后,我们需要进行验证码的验证,保证用户输入的验证码和生成的验证码字符串一致。我们可以在表单中增加一个验证码输入框,用户提交表单时,将用户输入的验证码和之前保存在SESSION中的值进行比对。

<?php
session_start();
if(isset($_SESSION['captcha']) && !empty($_SESSION['captcha'])) {
    if($_SESSION['captcha'] == $_POST['captcha']) {
        // 验证通过
    } else {
        // 验证失败
    }
} else {
    // 未生成验证码
}
?>

示例说明:

示例一

在用户登录页面中添加验证码,使用上述验证码类进行验证码生成,并验证用户输入的验证码是否正确。如果验证码错误,需要给用户相应的提示信息。

<?php
session_start();
$captcha = new Captcha();
$captcha->generate();
?>
<form method="post" action="login.php">
    <label for="username">用户名:</label>
    <input type="text" name="username" id="username"><br>
    <label for="password">密码:</label>
    <input type="password" name="password" id="password"><br>
    <label for="captcha">验证码:</label>
    <input type="text" name="captcha" id="captcha"><br>
    <img src="captcha.php" alt="验证码"><br>
    <input type="submit" value="登录">
</form>

<?php
if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['captcha'])) {
    if($_POST['captcha'] == $_SESSION['captcha']) {
        // 验证通过,进行登录验证
    } else {
        echo "验证码错误,请重新输入";
    }
}
?>

示例二

在注册页面中添加验证码,同样使用上述验证码类进行验证码生成,并保存用户的注册信息。如果用户输入的验证码错误,需要给出相应提示信息,不允许注册。如果用户输入的验证码正确,将用户信息保存到数据库中,并给出相应的成功提示信息。

<?php
session_start();
$captcha = new Captcha();
$captcha->generate();
?>
<form method="post" action="register.php">
    <label for="username">用户名:</label>
    <input type="text" name="username" id="username"><br>
    <label for="password">密码:</label>
    <input type="password" name="password" id="password"><br>
    <label for="repeatpassword">再次输入密码:</label>
    <input type="password" name="repeatpassword" id="repeatpassword"><br>
    <label for="email">电子邮箱:</label>
    <input type="text" name="email" id="email"><br>
    <label for="captcha">验证码:</label>
    <input type="text" name="captcha" id="captcha"><br>
    <img src="captcha.php" alt="验证码"><br>
    <input type="submit" value="注册">
</form>

<?php
if(isset($_POST['username']) && isset($_POST['password']) && isset($_POST['repeatpassword']) && isset($_POST['email']) && isset($_POST['captcha'])) {
    if($_POST['captcha'] == $_SESSION['captcha']) {
        // 验证通过,将用户信息保存到数据库中
    } else {
        echo "验证码错误,请重新输入";
    }
}
?>

这就是一个基于PHP的验证码类的实现方式,希望对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一个经典的PHP验证码类分享 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP小技巧搜集,每个PHPer都来露一手

    PHP小技巧搜集:每个PHPer都来露一手 随着开发的深入,我们会积累各种各样的PHP小技巧,这些小技巧往往在写代码时有助于提高效率或增强代码的可读性。下面就分享几个我常用的小技巧。 1. 用三元运算符代替if判断 在某些情况下,我们可以用三元运算符代替if判断语句,这样可以简化代码,提高代码的可读性。 示例: // if判断 if ($value == t…

    PHP 2023年5月23日
    00
  • PHP5.3与5.5废弃与过期函数整理汇总

    PHP5.3与5.5废弃与过期函数整理汇总 介绍 PHP5.3与5.5版本中,有一些函数被废弃(deprecated)或过期(deprecated),这些函数在未来版本中可能会被删除,所以建议在编写PHP代码时避免使用这些函数。 本文列举了PHP5.3与5.5版本中废弃与过期的函数,同时提供了一些替代方案。 废弃函数 以下是PHP5.3与5.5版本中废弃的函…

    PHP 2023年5月27日
    00
  • Dcat admin 多文件上传,七牛云云端上传

    进入官网  Dcat Admin – Php后台开发框架      这里要选择1.x 下面来安装框架            安装完laravel之后,需要修改.env文件,设置数据库链接设置正确       安装 dcat-admin composer require dcat/laravel-admin 然后运行下面的命令来发布资源: php artisa…

    PHP 2023年4月17日
    00
  • 在MySQL中修改密码及访问限制的设置方法详解

    当我们需要修改MySQL用户的密码或者限制其访问权限时,可以通过以下步骤来完成操作: 步骤一:登录MySQL 首先需要登录MySQL,在命令行环境下输入以下命令: mysql -u 用户名 -p 注意:上述命令中的“用户名”需要替换成你需要登录的用户名,登录后需要输入该用户的密码。 如果一切顺利,则会进入MySQL的命令行界面。 步骤二:查看用户列表 在My…

    PHP 2023年5月27日
    00
  • fpm模式下读取到is_cli为何为true

    目录 问题出现和简单排查 排查 经过思考和猜测,严重怀疑是fpm读取到了cli下的opcache 原起 粗浅探索 测试代码 opcache配置 共享内存缓存与文件缓存 php-fpm下读取到is_cli为true,不知道你们是否遇到过,我是遇到了。。。。有人会说,即使为true又怎么了,你是没遇到有些根据is_cli来走不同逻辑判断的,如果读取的是错的就会引…

    PHP 2023年4月17日
    00
  • PHP7常量数组用法分析

    PHP7常量数组用法分析 简介 在PHP程序开发中,常量数组是一个非常有用的数据结构,常量数组能够帮助开发者提高程序的可维护性和可读性。本文将详细讲解PHP7常量数组的使用方法及常见应用场景。 申明常量数组 申明一个常量数组可以使用 define() 函数以及 const 关键字。 使用 define() 函数 define(‘COLORS’, [‘red’…

    PHP 2023年5月26日
    00
  • PHP内置加密函数详解

    PHP内置加密函数详解 本文将对PHP内置的加密函数进行详细的讲解,包括常用的hash算法、加密方式以及其使用方法。 常用hash算法 md5 md5是一种广泛使用的hash算法。它将任意长度的消息压缩到一个128位的hash值,通常用于数据完整性校验、数字签名等。 // 使用md5计算字符串的hash值 $str = ‘Hello World’; $has…

    PHP 2023年5月27日
    00
  • PHP 实用代码收集

    PHP 实用代码收集攻略 简介 PHP 实用代码收集是一款以整理 PHP 开发者日常使用到的代码片段为主的网站,致力于为 PHP 开发者提供优质、实用的 PHP 代码。 如何使用 浏览代码收集列表:网站首页展示所有分类和部分相关文章,可以点击分类进入相应页面查看更多相关文章或者点击文章进入具体页面浏览文章内容。 搜索功能搜索相关代码片段:在网站页面顶部有搜索…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部