码迷,mamicode.com
首页 > Web开发 > 详细

PHP 验证码   高洛峰 细说PHP

时间:2016-08-24 17:36:28      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:验证码   画图   

前端页面index.php

<?php
header(‘content-type:text/html;charset=utf-8‘);
if(isset($_POST[‘dosubmit‘])){
    session_start();
    if(strtoupper($_SESSION[‘code‘]) == strtoupper($_POST[‘code‘])){
        echo ‘输入成功!<br/>‘;
    }else{
        echo ‘输入不对<br/>‘;
    }
}
?>
<form action="index.php" method="post">
用户名:<input type="text" name="username" value=""/><br/>
标题:<input type="text" name="title" value=""/><br/>
内容:<textarea name="content" cols="40" rows="4"></textarea><br/>
验证码:<input type="text" size="4" name="code"><img src="test.php" onclick =""http://blog.51cto.com/viewpic.php?refimg=" + this.src=‘test.php?‘+Math.random()"/><br/>
<input type="submit" name="dosubmit" value="留言"/>
</form>

生成验证码图片test.php

<?php 
       //开启session
       session_start();
        require ‘print.php‘;//导入验证码类文件
        $vcode =new Vcode(80,30,4);//实例化验证码类
        //将验证码放到服务器自己的空间保存一份
        $_SESSION[‘code‘] = $vcode->getCode();
        //将验证码的图片输出
        $vcode->outimg();//调用方法

验证码类 print.php

<?php 
    class Vcode{
        private $width;         //宽
        private $heigth;        //高
        private $num;           //数量
        private $code;          //验证码
        private $img;           //图像资源
        //构造方法
        function __construct($width=80,$height=25,$num=4){
                $this->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 = imagecreatetruecolor($this->width, $this->heigth);
            //设置随机背景颜色
            $bgcolor = imagecolorallocate($this->img, rand(225, 255), rand(225, 255), rand(225, 255));
            //填充背景色
            imagefill($this->img, 0, 0, $bgcolor);
            //画矩形
            $bordercolor = imagecolorallocate($this->img, 0, 0, 0);
            imagerectangle($this->img, 0, 0, $this->width-1, $this->heigth-1, $bordercolor);
        }
        //画字
        private function  outString(){
                for($i=0;$i<$this->num;$i++){                        
                $color  =   imagecolorallocate($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);
                imagestring($this->img, $font,$x, $y, $this->code{$i}, $color);
                           }
        }
        //设置干扰元素
        private function setDisturb(){
                //加上点数
                for($i=0;$i<100;$i++){
                    $color  =   imagecolorallocate($this->img, rand(0, 255), rand(0, 255), rand(0, 255));
                    imagesetpixel($this->img, rand(1, $this->width-2), rand(1, $this->heigth-2), $color);
                }
                //加上线条
                for($i=0;$i<10;$i++){
                    $color  =   imagecolorallocate($this->img, rand(0, 255), rand(0, 128), rand(0, 255));
                    imagearc($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:image/jpeg");
           //     imagejpeg($this->img);
           if(imagetypes() & IMG_GIF){
                  header("Content-Type:image/gif");
                 imagejpeg($this->img);
           }elseif(imagetypes() & IMG_JPEG){
                  header("Content-Type:image/jpeg");
                 imagejpeg($this->img);
           }elseif(imagetypes() & IMG_JPG){
                  header("Content-Type:image/jpg");
                 imagejpeg($this->img);
           }elseif(imagetypes() & IMG_PNG){
                  header("Content-Type:image/png");
                 imagejpeg($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(){
            imagedestroy($this->img);
        }
        
    }



本文出自 “津沙港湾” 博客,请务必保留此出处http://11410485.blog.51cto.com/11400485/1842076

PHP 验证码   高洛峰 细说PHP

标签:验证码   画图   

原文地址:http://11410485.blog.51cto.com/11400485/1842076

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!