PHP动态生成图片验证码的程序源代码

后端开发   发布日期:2023年05月13日   浏览次数:356

1.PHP生成验证码图片的核心代码:

get_code.php

< ?php session_start();
//验证码类
class ValidateCode {
    private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789'; //随机因子
    private $code; //验证码
    private $codelen = 4; //验证码长度
    private $width = 90; //宽度
    private $height = 30; //高度
    private $img; //图形资源句柄
    private $font; //指定的字体
    private $fontsize = 17; //指定字体大小
    private $fontcolor; //指定字体颜色
    //构造方法初始化
    public
    function __construct() {
        $this - >font = dirname(__FILE__).'/css/font/Elephant.ttf'; //注意字体路径要写对,否则显示不了图片
    }
    //生成随机码
    private
    function createCode() {
        $_len = strlen($this - >charset) - 1;
        for ($i = 0; $i < $this - >codelen; $i++) {
            $this - >code. = $this - >charset[mt_rand(0, $_len)];
        }
    }
    //生成背景
    private
    function createBg() {
        $this - >img = imagecreatetruecolor($this - >width, $this - >height);
        $color = imagecolorallocate($this - >img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
        imagefilledrectangle($this - >img, 0, $this - >height, $this - >width, 0, $color);
    }
    //生成文字
    private
    function createFont() {
        $_x = $this - >width / $this - >codelen;
        for ($i = 0; $i < $this - >codelen; $i++) {
            $this - >fontcolor = imagecolorallocate($this - >img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
            imagettftext($this - >img, $this - >fontsize, mt_rand( - 30, 30), $_x * $i + mt_rand(1, 5), $this - >height / 1.4, $this - >fontcolor, $this - >font, $this - >code[$i]);
        }
    }
    //生成线条、雪花
    private
    function createLine() {
        //线条
        for ($i = 0; $i < 6; $i++) {
            $color = imagecolorallocate($this - >img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
            imageline($this - >img, mt_rand(0, $this - >width), mt_rand(0, $this - >height), mt_rand(0, $this - >width), mt_rand(0, $this - >height), $color);
        }
        //雪花
        for ($i = 0; $i < 100; $i++) {
            $color = imagecolorallocate($this - >img, mt_rand(200, 255), mt_rand(200, 255), mt_rand(200, 255));
            imagestring($this - >img, mt_rand(1, 5), mt_rand(0, $this - >width), mt_rand(0, $this - >height), '*', $color);
        }
    }
    //输出
    private
    function outPut() {
        header('Content-type:image/jpeg');
        imagepng($this - >img);
        imagedestroy($this - >img);
    }
    //对外生成
    public
    function doimg() {
        $this - >createBg();
        $this - >createCode();
        $this - >createLine();
        $this - >createFont();
        $this - >outPut();
    }
    //获取验证码
    public
    function getCode() {
        return strtoupper($this - >code);
    }
}
$_vc = new ValidateCode(); //实例化一个对象
$_vc - >doimg();

$_SESSION['login_check_code'] = $_vc - >getCode(); //验证码保存到SESSION中
? >

2.在HTML使用PHP验证码的方法

<div id="codeimg">
    <img id="refresh" src="get_code.php" style="cursor:pointer">
</div>

3.提交时验证验证码是否正确

$code=strtoupper($_POST['code']); //统一都将验证码字符转为大写字母

if ($code!=$_SESSION["login_check_code"]){
    echo "您获取的验证码不正确";
    exit;
}

以上就是PHP动态生成图片验证码的程序源代码的详细内容,更多关于PHP动态生成图片验证码的程序源代码的资料请关注九品源码其它相关文章!