ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

PHP笔记-验证码例子

2022-02-05 16:02:58  阅读:183  来源: 互联网

标签:php captcha 验证码 笔记 如下 Captcha ini PHP


注意需要先把php_gd2.dll放开:

php.ini文件修改。

如下验证码效果:

代码如下:

Captcha.php

<?php


namespace vendor;


class Captcha{

    public static function getCaptcha($width = 450, $height = 65, $length = 4, $fonts = ""){

        if(empty($fonts)){

            $fonts = 'captcha.ttf';
        }
        $fonts = __DIR__ . "/fonts/" . $fonts;

        $img = imagecreatetruecolor($width, $height);
        $bgColor = imagecolorallocate($img, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
        imagefill($img, 0, 0, $bgColor);

//        //增加干扰
        for($i = 0; $i < 50; $i++){

            $dotsColor = imagecolorallocate($img, mt_rand(140, 190), mt_rand(140, 190), mt_rand(140, 190));
            imagestring($img,mt_rand(1, 5), mt_rand(0, $width), mt_rand(0, $height), "*", $dotsColor);
        }

        for($i = 0; $i < 15; $i++){

            $lineColor = imagecolorallocate($img, mt_rand(80, 130), mt_rand(80, 130), mt_rand(80, 130));
            imageline($img, mt_rand(0, $width), mt_rand(0, $height), mt_rand(0, $width), mt_rand(0, $height), $lineColor);
        }
//
        $captcha = self::getString($length);
        @session_start();
        $_SESSION["captcha"] = $captcha;
        for($i = 0; $i < $length; $i++){

            $cColor = imagecolorallocate($img, mt_rand(15, 25), mt_rand(15, 25), mt_rand(15, 25));
            imagettftext($img, mt_rand(15, 25), mt_rand(-45, 45), $width / ($length + 1) * ($i + 1),
            mt_rand(25, $height -25), $cColor, $fonts, $captcha[$i]);
        }
        header("Content-type:image/png");
        imagepng($img);
        imagedestroy($img);
    }

    private static function getString($length = 4): string{

        $captcha = "";
        for($i = 0; $i < $length; $i++){

            switch(mt_rand(1, 3)){

                case 1: //49-57代表1-9
                    $captcha .= chr(mt_rand(49, 57));
                    break;
                case 2: //65-90代表a-z
                    $captcha .= chr(mt_rand(65, 90));
                    break;
                case 3: //97-122代表A-Z
                    $captcha .= chr(mt_rand(97, 122));
                    break;
            }
        }

        return $captcha;
    }

}

这里我的调用是这样的:

    public function captcha(){

        Captcha::getCaptcha();
    }

就可以了。

标签:php,captcha,验证码,笔记,如下,Captcha,ini,PHP
来源: https://blog.csdn.net/qq78442761/article/details/122790912

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有