zoukankan      html  css  js  c++  java
  • PHP雪花背景验证码

    ValidateCode.class.php
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    <?php
        /**
         * 验证码类
         * @author staven
         *
         */
        class ValidateCode{
             
            private $width;         //验证码图片的宽度
            private $height;        //验证码图片的高度
            private $checkCode;     //验证码字符
            private $codeNum;       //验证码字符个数
            private $font;          //字体
            private $fontSize;      //字体大小
            private $fontColor;     //字体颜色
            private $image;         //验证码句柄
            private $charset;       //验证字符随机因子
             
            //构造器方法初始化
            function __construct($width=100, $height=20, $codeNum=4,$fontSize = 12){
                $this->width = $width;
                $this->height = $height;
                $this->codeNum = $codeNum;
                $this->fontSize = $fontSize;
                $this->font = dirname(__FILE__) . '/font/elephant.ttf';
                $this->charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789';      //提供随机因子
                $this->checkCode = $this->createCheckCode();
                 
            }
             
            /* 用于输出验证码图片,并且将验证码信息写入session */
            function __toString(){
                /* 加到session中, 存储下标为code */
                $_SESSION["code"] = strtoupper($this->checkCode);
                $this->outImage();
                return '';
            }
             
            /* 生成随机验证码字符 */
            private function createCheckCode(){
                 
                for ($i=0; $i<$this->codeNum; $i++){
                    $this->checkCode .= $this->charset{mt_rand(0,strlen($this->charset)-1)};
                }
                return $this->checkCode;
            }
             
            /* 输出验证码 */
            private function outImage(){
                $this->getCreateImage();
                $this->createLine();
                $this->outputText();
                $this->outputImage();
            }
             
             /* 生成验证码背景图片 */
            private function getCreateImage(){
                $this->image = imagecreatetruecolor($this->width,$this->height);
                $color = imagecolorallocate($this->image, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
                imagefilledrectangle($this->image,0,$this->height,$this->width,0,$color); 
            }
             
            /* 向句柄图片中写入文字信息 */
            private function outputText(){
                $_x = $this->width / $this->codeNum; 
                for ($i=0;$i<$this->codeNum;$i++) { 
                    $this->fontcolor = imagecolorallocate($this->image,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)); 
                    imagettftext($this->image,$this->fontSize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontColor,$this->font,$this->checkCode[$i]); 
                
            }
             
            /*  创建雪花图案 */
            private function createLine() {
                for ($i=0;$i<6;$i++) {
                    $color = imagecolorallocate($this->image,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
                    imageline($this->image,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->image,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
                    imagestring($this->image,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
                }
            }
             
            /* 生成验证码图片 */
            private function outputImage(){
                header('Content-type:image/png'); 
                imagepng($this->image); 
                
            }
             
            /* 销毁句柄,释放资源 */
            function __destruct() {
                imagedestroy($this->image);
            }
             
        }

    imageCode.php

    1
    2
    3
    4
    <?php
        session_start();        //开启SESSION
        require_once 'ValidateCode.class.php';
        echo new ValidateCode();

    image.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <!DOCTYPE html>
    <html>
    <head>
        <meta charset="gbk">
        <title>验证码</title>
    </head>
    <body>
        <img src="imagecode.php" alt="看不清楚,换一张" style="cursor: pointer;" onclick="this.src='imagecode.php?'+new Date().getTime();" />
        <form method="POST" action="image.php">
            <input type="text"  size="4" name="code" />
            <input type="submit" name="submit" value="提交">
        </form>
    </body>
    </html>
    <?php
       
        /** 用于 */
        session_start();                                                    //开启SESSION
        if(isset($_POST['submit'])){                                        //判断用户提交后执行
            /* 判断用户在表单中输入的字符串和验证码图片中的字符串是否相同  */
            if(strtoupper(trim($_POST["code"])) == $_SESSION['code']){      //如果验证码输出成功
                echo '验证码输入成功<br>';                                   //输出成功的提示信息
            }else{                                                          //如果验证码输入失败
                echo '<font color="red">验证码输入错误!!</font><br>';    //输出失败的输入信息
            }
        }
    ?>
     





  • 相关阅读:
    66. Plus One
    Binder
    Activity启动模式笔记整理
    ANR和FC
    java之yield(),sleep(),wait()区别详解-备忘笔记
    Http方法:Get请求与Post请求的区别
    BroadcastReceiver的用法笔记
    java笔记
    Leetcode -- Day 17 & Day 18 & Day 19
    Leetcode -- Day 14&Day15&Day16&Day17
  • 原文地址:https://www.cnblogs.com/staven/p/5170184.html
Copyright © 2011-2022 走看看