博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php Captcha 練習
阅读量:4955 次
发布时间:2019-06-12

本文共 3423 字,大约阅读时间需要 11 分钟。

突然有個想法,就是去寫一個簡單的驗證碼類,其實驗證碼在很多框架有自帶的,網上一搜也一大把,我只是想當作是練習,熟悉一下過程。

session_start();class He_Captcha{        private $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";    private $text;    private $im;    public    $num;    public    $size;    public    $width;    public    $height;    public    $session_var;    public    $ttfs = array(        'Jura.ttf',        'AntykwaBold.ttf',        'Duality.ttf',        'VeraSansBold.ttf'    );        /*       生成驗證碼     *num     顯示的驗證碼字符數     *size    字符的字體大小     *session_var   驗證碼會話名稱     *width   驗證碼圖片的寬     *height  驗證碼圖片的高    */    public function Captcha($num = 4, $size = 15, $session_var = '', $width = 0, $height = 0){        $this->num = (int)max($this->num, $num);        $this->size = (int)max($this->size, $size);        $this->width = $width ? (int)max($this->width, $width) : $this->num * $this->size;        $this->height = $height ? (int)max($this->height, $height) : $this->size + 10;        $this->session_var = strlen(trim($session_var))>2 ? trim($session_var):'captcha';                        $this->_getText($this->num);        $_SESSION[$this->session_var] = $this->text;        $this->im = imagecreatetruecolor($this->width, $this->height);//畫圖像         $this->_drowBackground();//畫背景         $this->_setNoiseLines();//畫干擾線         $this->_setNoisePoints();//畫干擾點         $this->_writeText();//畫驗證碼         $this->_createCaptcha();    }        /*創建驗證碼內容*/    private function _getText($num){        for( $i = 0; $i < $num; $i++ ){            $this->text .= $this->str[mt_rand(0,strlen($this->str)-1)];        }    }        /*畫背景*/    private function _drowBackground(){        $bg_color = imagecolorallocate($this->im, 235, 236, 237);        imagefilledrectangle($this->im, 0, 0, $this->width, $this->height, $bg_color);    }        /*畫干擾點*/    private function _setNoisePoints(){        $points = 2 * $this->width;        for($i = 0;$i < $points;$i++){            $font_color = imagecolorallocate($this->im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));            imagesetpixel($this->im, mt_rand(0, $this->width), mt_rand(0, $this->height), $font_color);        }    }    /*畫干擾線*/    private function _setNoiseLines(){        $lines = $this->width / 12;        for($i = 0; $i < $lines; $i++){            $font_color = imagecolorallocate($this->im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));            imagearc($this->im, mt_rand( -$this->width, $this->width), mt_rand( -$this->height, $this->height), mt_rand(30, $this->width * 2), mt_rand(20, $this->height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color);            }    }    /*畫驗證碼*/    private function _writeText(){        for($i = 0; $i < $this->num; $i++){            $ttf = 'fonts/'.$this->ttfs[array_rand($this->ttfs,1)];            $text_color = imagecolorallocate($this->im, mt_rand(0, 200), mt_rand(0, 120), mt_rand(0, 120));            @imagefttext($this->im, $this->size, mt_rand(-10,10), $this->size*$i, $this->size+5, $text_color, $ttf, $this->text[$i]);        }    }        /*生成驗證碼*/    private function _createCaptcha(){        header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");        header("Content-Type: image/png; charset=utf-8");        imagepng($this->im);        imagedestroy($this->im);    }}

 

下面為調用以及生成效果:

$c = new He_Captcha();$c->Captcha();

.........

转载于:https://www.cnblogs.com/helin/archive/2013/05/02/3054684.html

你可能感兴趣的文章
Nginx配置文件nginx.conf中文详解(转)
查看>>
POJ 1988 Cube Stacking
查看>>
POJ 1308 Is It A Tree?(并查集)
查看>>
N进制到M进制的转换问题
查看>>
Android------三种监听OnTouchListener、OnLongClickListener同时实现即其中返回值true或者false的含义...
查看>>
MATLAB实现多元线性回归预测
查看>>
Mac xcode 配置OpenGL
查看>>
利用sed把一行的文本文件改成每句一行
查看>>
使用Asyncio的Coroutine来实现一个有限状态机
查看>>
Android应用开发:核心技术解析与最佳实践pdf
查看>>
python——爬虫
查看>>
2.2 标识符
查看>>
孤荷凌寒自学python第五天初识python的列表
查看>>
孤荷凌寒自学python第五十八天成功使用python来连接上远端MongoDb数据库
查看>>
求一个字符串中最长回文子串的长度(承接上一个题目)
查看>>
简单权限管理系统原理浅析
查看>>
springIOC第一个课堂案例的实现
查看>>
求输入成绩的平均分
查看>>
ORACLE 数据库概述
查看>>
php PDO (转载)
查看>>