• php生成验证码类


    php生成验证码类

    直接看代码

    <?php
    session_start();
    class Code{
    
        //资源
        private $img;
        //画布宽度
        private $width=100;
        //画布高度
        private $height=30;
        //背景颜色
        private $bgColor='#ffffff';
        //验证码
        private $code;
        //验证码的随机种子
        private $codeStr='23456789abcdefghjkmnpqrstuvwsyz';
        //验证码长度
        private $codeLen=4;
        //验证码字体
        private $font;
        //验证码字体大小
        private $fontSize=16;
        //验证码字体颜色
        private $fontColor='';
    
        public function __construct() {
        }
    
        //创建验证码
        public function make()
        {
            if(empty($this->font))
            {
                $this->font = base_path().'publicoutconsola.ttf';
            }
            $this->create();//生成验证码
            header("Content-type:image/png");
            imagepng($this->img);
            imagedestroy($this->img);
            exit;
        }
    
        //设置字体文件
        public function font($font)
        {
            $this->font= $font;
            return $this;
        }
    
        //设置文字大小
        public function fontSize($fontSize)
        {
            $this->fontSize=$fontSize;
            return $this;
        }
    
        //设置字体颜色
        public function fontColor($fontColor)
        {
            $this->fontColor = $fontColor;
            return $this;
        }
    
        //验证码数量
        public function num($num)
        {
            $this->codeLen=$num;
            return $this;
        }
    
        //设置宽度
        public function width($width)
        {
            $this->width = $width;
            return $this;
        }
    
        //设置高度
        public function height($height)
        {
            $this->height = $height;
            return $this;
        }
    
        //设置背景颜色
        public function background($color)
        {
            $this->bgColor = $color;
            return $this;
        }
    
        //返回验证码
        public function get() {
            return $_SESSION['code'];
        }
    
        //生成验证码
        private function createCode() {
            $code = '';
            for ($i = 0; $i < $this->codeLen; $i++) {
                $code .= $this->codeStr [mt_rand(0, strlen($this->codeStr) - 1)];
            }
            $this->code = strtoupper($code);
            $_SESSION['code'] = $this->code;
        }
    
        //建画布
        private function create() {
            if (!$this->checkGD())
                return false;
            $w = $this->width;
            $h = $this->height;
            $bgColor = $this->bgColor;
            $img = imagecreatetruecolor($w, $h);
            $bgColor = imagecolorallocate($img, hexdec(substr($bgColor, 1, 2)), hexdec(substr($bgColor, 3, 2)), hexdec(substr($bgColor, 5, 2)));
            imagefill($img, 0, 0, $bgColor);
            $this->img = $img;
            $this->createLine();
            $this->createFont();
            $this->createPix();
            $this->createRec();
        }
    
        //画线
        private function createLine(){
            $w = $this->width;
            $h = $this->height;
            $line_color = "#dcdcdc";
            $color = imagecolorallocate($this->img, hexdec(substr($line_color, 1, 2)), hexdec(substr($line_color, 3, 2)), hexdec(substr($line_color, 5, 2)));
            $l = $h/5;
            for($i=1;$i<$l;$i++){
                $step =$i*5;
                imageline($this->img, 0, $step, $w,$step, $color);
            }
            $l= $w/10;
            for($i=1;$i<$l;$i++){
                $step =$i*10;
                imageline($this->img, $step, 0, $step,$h, $color);
            }
        }
    
        //画矩形边框
        private function createRec() {
            //imagerectangle($this->img, 0, 0, $this->width - 1, $this->height - 1, $this->fontColor);
        }
    
        //写入验证码文字
        private function createFont() {
            $this->createCode();
            $color = $this->fontColor;
            if (!empty($color)) {
                $fontColor = imagecolorallocate($this->img, hexdec(substr($color, 1, 2)), hexdec(substr($color, 3, 2)), hexdec(substr($color, 5, 2)));
            }
            $x = ($this->width - 10) / $this->codeLen;
            for ($i = 0; $i < $this->codeLen; $i++) {
                if (empty($color)) {
                    $fontColor = imagecolorallocate($this->img, mt_rand(50, 155), mt_rand(50, 155), mt_rand(50, 155));
                }
                imagettftext($this->img, $this->fontSize, mt_rand(- 30, 30), $x * $i + mt_rand(6, 10), mt_rand($this->height / 1.3, $this->height - 5), $fontColor, $this->font, $this->code [$i]);
            }
            $this->fontColor = $fontColor;
        }
    
        //画线
        private function createPix() {
            $pix_color = $this->fontColor;
            for ($i = 0; $i < 50; $i++) {
                imagesetpixel($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), $pix_color);
            }
    
            for ($i = 0; $i < 2; $i++) {
                imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $pix_color);
            }
            //画圆弧
            for ($i = 0; $i < 1; $i++) {
                // 设置画线宽度
                imagearc($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height)
                    , mt_rand(0, 160), mt_rand(0, 200), $pix_color);
            }
            imagesetthickness($this->img, 1);
        }
    
        //验证GD库
        private function checkGD() {
            return extension_loaded('gd') && function_exists("imagepng");
        }
    
    }
  • 相关阅读:
    mysql 1
    mysql 创建库
    SQLServer2008数据库卸载图解
    同一个局域网中用Windows自己的远程桌面远程局域网中的其他PC
    WIN10怎么安装SQL server2000数据库
    怎样彻底卸载(删除)SQL server2000
    SQL Server 2000安装教程图解
    如何将网页保存为PDF文件
    【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(四)
    【转】ArcGIS API for Silverlight/WPF 2.1学习笔记(五)
  • 原文地址:https://www.cnblogs.com/crazytata/p/10171414.html
Copyright © 2020-2023  润新知