PHP 验证码   高洛峰 细说PHP
admin
2023-06-22 01:21:29
0

前端页面index.php

';
    }else{
        echo '输入不对
';     } } ?> 用户名:
标题:
内容:
验证码:

生成验证码图片test.php

getCode();
        //将验证码的图片输出
        $vcode->outimg();//调用方法

验证码类 print.php

width        =   $width;
                $this->heigth       =   $height;
                $this->num          =   $num;
                $this->code        =   $this->createCode();
        }
        //获取字符的验证码
        function getCode(){
            return $this->code;
        }
        
        
        //输出验证码图形
        function outimg(){
            //创建背景 颜色 大小 边框
            $this->createBack();           
            //画字 大小 字体颜色
            $this->outString();
            //干扰元素 点 线条
            $this->setDisturb();
            //输出图像
            $this->printImg();
        }
        //创建背景
        private function createBack(){
            //创建资源
            $this->img = p_w_picpathcreatetruecolor($this->width, $this->heigth);
            //设置随机背景颜色
            $bgcolor = p_w_picpathcolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255));
            //填充背景色
            p_w_picpathfill($this->img, 0, 0, $bgcolor);
            //画矩形
            $bordercolor = p_w_picpathcolorallocate($this->img, 0, 0, 0);
            p_w_picpathrectangle($this->img, 0, 0, $this->width-1, $this->heigth-1, $bordercolor);
        }
        //画字
        private function  outString(){
                for($i=0;$i<$this->num;$i++){                        
                $color  =   p_w_picpathcolorallocate($this->img, rand(0, 128), rand(0, 128), rand(0, 128));
                $font = rand(3,5);
                $x = 3 + ($this->width/$this->num)*$i;
                $y = rand(1, 5);
                p_w_picpathstring($this->img, $font,$x, $y, $this->code{$i}, $color);
                           }
        }
        //设置干扰元素
        private function setDisturb(){
                //加上点数
                for($i=0;$i<100;$i++){
                    $color  =   p_w_picpathcolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255));
                    p_w_picpathsetpixel($this->img, rand(1, $this->width-2), rand(1, $this->heigth-2), $color);
                }
                //加上线条
                for($i=0;$i<10;$i++){
                    $color  =   p_w_picpathcolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255));
                    p_w_picpatharc($this->img, rand(-10, $this->width+10), rand(-10, $this->heigth+10), rand(30, 300), rand(30, 300), 55, 44, $color);
                }
        }
        //输出图像
        private function printImg(){
          //      header("Content-Type:p_w_picpath/jpeg");
           //     p_w_picpathjpeg($this->img);
           if(p_w_picpathtypes() & IMG_GIF){
                  header("Content-Type:p_w_picpath/gif");
                 p_w_picpathjpeg($this->img);
           }elseif(p_w_picpathtypes() & IMG_JPEG){
                  header("Content-Type:p_w_picpath/jpeg");
                 p_w_picpathjpeg($this->img);
           }elseif(p_w_picpathtypes() & IMG_JPG){
                  header("Content-Type:p_w_picpath/jpg");
                 p_w_picpathjpeg($this->img);
           }elseif(p_w_picpathtypes() & IMG_PNG){
                  header("Content-Type:p_w_picpath/png");
                 p_w_picpathjpeg($this->img);
           }
        }
        //生成验证码
        private function  createCode(){
            $codes = "23456789abcdefghijklmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ";
            $code = "";
            for($i=0;$i<$this->num;$i++){
                $code .=$codes{rand(0,strlen($codes)-1)};
            }
            return $code;
        }
        
        //释放图像资源
        function __destruct(){
            p_w_picpathdestroy($this->img);
        }
        
    }



相关内容

热门资讯

中方正告驻韩美军司令:你越线了...   中方正告驻韩美军司令:你越线了  【中方正告驻韩美军司令:你越线了】2026年5月22日,驻韩美...
林俊杰与大哥社交平台互相取关 ... 林俊杰与大哥社交平台互相取关  【林俊杰与大哥社交平台互相取关】5月27日,歌手林俊杰的社交账号出现...
涉嫌虐杀韩国大学生,6名中国电... 【文/观察者网 王一】综合美联社、英国路透社等外媒报道,当地时间5月27日,柬埔寨贡布省法院裁定,6...
陈忠岳:以智能服务推动AI赋能... 天津北方网讯:在5月28日于天津启幕的2026世界智能产业博览会嘉宾发言环节,中国移动通信集团有限公...
吕梁举办CCUS产业技术成果路... 5月28日,2026年CCUS产业技术成果路演活动在孝义举办。活动聚焦碳捕集、利用与封存前沿领域,搭...
特朗普的两张稀土王牌,先打上“... 【文/观察者网 阮佳琪】特朗普恐怕想不到,他寄予厚望以摆脱对华稀土依赖的两张王牌,尚未与中方展开正式...
DC600V转DC48V光伏直... 大型光伏电站、集中式储能电站、高压直流配电系统普遍采用DC600V高压直流输电模式,具备输电距离远、...
融入服务大市场,河南“十五五”... 【大河财立方记者 陈诗昂】5月28日上午,河南省人民政府新闻办公室举行“开局起步‘十五五...
河南30℃+晴热天气陆续返场! 西部南部阵雨来扰,明夜起晴朗回归当前我省处在脊前槽后的西北气流里,西部地区由于受切变线影响,今天上午...
管涔山国有林管理局组织开展林草... 5月26日至27日,山西省管涔山国有林管理局组织开展林草防火视频监控系统、会议调度系统操作技能专项培...