Home  >  Article  >  Backend Development  >  How to implement verification code using php

How to implement verification code using php

藏色散人
藏色散人Original
2021-06-03 09:43:422992browse

php method to implement verification code: first create a drawing verification code class, with code such as "class Captcha {...}"; then draw the picture page; then set the form page; and finally create the verification page.

How to implement verification code using php

The operating environment of this article: Windows7 system, PHP7.1 version, DELL G3 computer

PHP implementation verification code

Drawing verification code class

<?php
class Captcha {
    const CODE_LENGTH = 4;  // 验证码长度固定为 4,可以根据实际需要修改
    const LINE_COUNT = 4;   // 干扰线个数
    const DOT_COUNT = 200;  // 干扰点个数
    // 验证码备选字符
    static $CANDIDATES = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
        // 创建图像对象
        $this->image = imagecreatetruecolor($width, $height);
        // 创建验证码
        $this->generateCaptchaCode();
    }
    public function __destruct() {
        // 销毁图像对象
        imagedestroy($this->image);
    }
    public function paint() {
        // 绘制背景
        $this->paintBackground();
        // 绘制验证码
        $this->paintText();
        // 绘制干扰
        $this->paintDirty();
    }
    public function output() {
        // 设置头部为PNG图片
        header(&#39;Content-Type: image/png&#39;);
        // 输出到浏览器
        imagepng($this->image);
    }
    public function code() {
        return $this->code;
    }
    private function paintBackground() {
        // 背景颜色设置为白色
        $color = imagecolorallocate($this->image, 255, 255, 255);
        // 填充背景
        imagefill($this->image, 0, 0, $color);
    }
    private function paintText() {
        // 遍历验证码,一个字符一个字符地绘制
        for ($i = 0; $i < strlen($this->code); ++$i) {
            $fontsize = 6;
            $color = imagecolorallocate($this->image, rand(0,50), rand(0,50), rand(0,50));
            $x = ($i * 100 / self::CODE_LENGTH) + rand(5, 10);
            $y = rand(5, 10);
            imagestring($this->image, $fontsize, $x, $y, $this->code[$i], $color);
        }
    }
    private function paintDirty() {
        // 绘制点
        for ($i = 0; $i < self::DOT_COUNT; ++$i) {
            // 点的颜色
            $pointcolor = imagecolorallocate($this->image, rand(100,200), rand(100,200), rand(100,200));    
            // 画点
            imagesetpixel($this->image, rand(1,99), rand(1,29), $pointcolor);
        }
        // 绘制线条
        for ($i = 0; $i < self::LINE_COUNT; $i++) {
            // 线的颜色
            $linecolor = imagecolorallocate($this->image, rand(100,200), rand(100,200), rand(100,200));
            // 画线
            imageline($this->image, rand(1,$this->width-1), rand(1,29), rand(1,99), rand(1,29), $linecolor);
        }
    }
    private function generateCaptchaCode() {
        // 从备选字符串中随机选取字符
        for ($i = 0; $i < self::CODE_LENGTH; ++$i) {
            $len = strlen(self::$CANDIDATES);
            $pos = rand(0, $len - 1);
            $ch = self::$CANDIDATES[$pos];
            $this->code .= $ch;
        }
    }
    private $image = NULL;  // 图像对象
    private $code = "";     // 验证码
    private $width = 0;     // 图像长度
    private $height = 0;    // 图像宽度
}
?>

Drawing picture page

<?php
session_start();  // 开启 Session,必须是第一句
require_once "./Captcha.php";
$captcha = new Captcha(100, 30);  // 创建对象
$_SESSION[&#39;captcha&#39;] = $captcha->code();  // 将验证码存入Session
$captcha->paint();  // 绘制
$captcha->output();  // 输出
?>

Recommended learning: "PHP video tutorial"

Form page

<?php
session_start();  // 开启Session,必须是第一句
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>提交页面</title>
    <script>
        function validate_form(form) {
            with (form) {
                if (captcha.value == null || captcha.value == "") {
                    alert("验证码不能为空!");
                    return false;
                }
            }
            return true;
        }
    </script>
</head>
<body>
    <form method="post" action="./validate.php" onsubmit="return validate_form(this)">
            验证码:<input type="text" name="captcha" value="" size=10>
            <img title="点击刷新" id="captchaImg" border="1" src="./captchaImage.php"
                onclick="this.src=&#39;./captchaImage.php?r=&#39; + Math.random();"></img><br>
            <input type="submit"/>
    </form>
</body>
</html>

Verification Page

<?php
session_start();  // 开启Session,必须是第一句
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>验证页面</title>
</head>
<body>
    <?php
    if (isset($_POST[&#39;captcha&#39;]) && strcasecmp($_POST[&#39;captcha&#39;], $_SESSION[&#39;captcha&#39;]) == 0) {
        echo "Succeeded!";
    } else {
        ec`
o "Failed!";
    }
    ?>
</body>
</html>

The above is the detailed content of How to implement verification code using php. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn