一个漂亮的php验证码类(分享)

来源:互联网 发布:印度 伊朗 知乎 编辑:程序博客网 时间:2024/05/10 04:36

下面小灰灰就为大家分享一个漂亮的php验证码类。需要的朋友可以过来参考下。 效果图: 


直接上代码:

ValidateCode.class.php

<?php//验证码类class ValidateCode {    private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ123456789';//随机因子    private $code;//验证码    private $codelen = 5;//验证码长度    private $width = 130;//宽度    private $height = 40;//高度    private $img;//图形资源句柄    private $font;//指定的字体    private $fontsize = 20;//指定字体大小    private $fontcolor;//指定字体颜色    //构造方法初始化    public function __construct() {        $this->font = '../font/elephant.ttf';//注意字体路径要写对,否则显示不了图片    }    //生成随机码    private function createCode() {        $_len = strlen($this->charset)-1;        for ($i=0;$i<$this->codelen;$i++) {            $this->code .= $this->charset[mt_rand(0,$_len)];        }    }    //生成背景    private function createBg() {        $this->img = imagecreatetruecolor($this->width, $this->height);        $color = imagecolorallocate($this->img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));        imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);    }    //生成文字    private function createFont() {        $_x = $this->width / $this->codelen;        for ($i=0;$i<$this->codelen;$i++) {            $this->fontcolor = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));            imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height / 1.4,$this->fontcolor,$this->font,$this->code[$i]);        }    }    //生成线条、雪花    private function createLine() {        //线条        for ($i=0;$i<6;$i++) {            $color = imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));            imageline($this->img,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->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));            imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);        }    }    //输出    private function outPut() {        header('Content-type:image/png');        imagepng($this->img);        imagedestroy($this->img);    }    //对外生成    public function doimg() {        $this->createBg();        $this->createCode();        $this->createLine();        $this->createFont();        $this->outPut();    }    //获取验证码    public function getCode() {        return strtolower($this->code);    }}


captcha.php(用于调用该类)

session_start();require './ValidateCode.class.php';  //先把类包含进来,实际路径根据实际情况进行修改。$_vc = new ValidateCode();  //实例化一个对象$_vc->doimg();  $_SESSION['authnum_session'] = $_vc->getCode();//验证码保存到SESSION中


引用到页面中:

<img title="点击刷新" src="./captcha.php" align="absbottom" onclick="this.src='captcha.php?'+Math.random();"></img>


完整demo下载:点击下载