一个经典的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实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】

    PHP实现有序数组打印或排序的方法 在PHP中,实现有序数组的打印或排序,有多种方法可供选择。本文将分享其中两种具有代表性的方法,分别是使用sort()函数和array_multisort()函数,而且我们还提供了Python、C及Go语言的实现代码。下面,我们详细讲解这两种方法的实现步骤。 使用sort()函数 sort()函数是PHP中用来对数组进行排序…

    PHP 2023年5月26日
    00
  • PHP字符串中特殊符号的过滤方法介绍

    一、PHP字符串中特殊符号的过滤方法介绍 在PHP字符串的处理中,常常需要对字符串中的特殊符号进行过滤和处理,防止出现安全隐患和功能错误。本文将详细介绍PHP字符串中特殊符号的过滤方法。 二、HTML标签和JavaScript脚本注入漏洞 在PHP应用开发中,常常会有用户输入的情况,比如表单提交、评论或留言等。这就可能导致HTML标签和JavaScript脚…

    PHP 2023年5月26日
    00
  • 详解PHP正则表达式替换实现(PHP preg_replace,PHP preg_replace)

    PHP中的preg_replace函数是一个强大的正则表达式替换工具,可以用于替换字符串、过滤不需要的内容等。下面将详细讲解PHP正则表达式替换实现的完整攻略。 步骤一:准备待匹配的字符串和正则表达式 在使用preg_replace函数之前,需要准备待匹配的字符串和正则表达式。字符串可以是一个变量或者常量,正则表达式则是一个字符串,用来描述所需匹配的模式。例…

    PHP 2023年5月26日
    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
  • 聊聊PHP中die()和sleep()函数的用法

    下面为您讲解聊聊PHP中die()和sleep()函数的用法。 1. die() 函数 1.1 概述 die() 函数用于在程序执行过程中终止程序,并输出指定的错误信息。 1.2 用法 die() 函数的用法比较简单,以下是基本语法: die($msg); 其中,$msg 为要输出的错误信息。 1.3 示例 下面是一个示例,我们尝试打开一个不存在的文件,并在…

    PHP 2023年5月26日
    00
  • 删除数组元素实用的PHP数组函数

    下面是删除数组元素实用的PHP数组函数的完整攻略: 一、背景 在实际开发中,我们经常需要对数组进行操作,其中删除数组元素是常见的一种操作。PHP提供了多个函数帮助我们快速实现这一操作。 二、常用的删除数组元素函数 以下是PHP中常用的删除数组元素函数: 1. unset() unset() 函数用于释放指定的变量。在使用时,我们可以将需要删除的数组元素的下标…

    PHP 2023年5月26日
    00
  • 微信小程序点击保存图片到本机功能

    下面是实现微信小程序中点击保存图片到本机的完整攻略。为了更好地演示,我将以“点击保存图片到本机”按钮实现该功能。 1. 准备工作 在对话框中提到的实现步骤中,需要使用到以下两个组件:button和image。 在小程序中引入组件需要使用组件标签,示例如下: <button></button> <image></ima…

    PHP 2023年5月30日
    00
  • php常用数学函数汇总

    PHP常用数学函数汇总 在PHP中,有许多常用的数学函数用于数学计算,下面将总结一些PHP常用的数学函数。 数學函數 abs($number) 函数的功能是取给定数的绝对值。例如: $number = -10; $abs_number = abs($number); echo $abs_number; // 输出 10 round($number, $pre…

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