文档章节

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

x
 xianrenqh
发布于 2017/09/11 10:22
字数 474
阅读 16
收藏 0

#程序员薪资揭榜#你做程序员几年了?月薪多少?发量还在么?>>>

下面小灰灰就为大家分享一个漂亮的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下载:点击下载

© 著作权归作者所有

x
粉丝 1
博文 19
码字总数 11155
作品 0
郑州
私信 提问
加载中

评论(0)

暂无文章

认知智能技术三大技术体系之认知维度道翰天琼

认知维度技术体系是认知智能三大技术体系(认知维度,类脑模型,万维图普)之一 。认知维度技术体系以中西方哲学思想体系,认知语言学,形式语言学,三体论等思想体系为基础,以划分人类认知...

jackli2020
25分钟前
19
0
Oracle中如何实现分页+排序? 其中遇到的问题,你,注意了嘛???

分页 + 排序 一.简单分页: 需求:分页查询台账表T_ACCOUNT,每页10条记录 分析:我们在ORACLE进行分页查询,需要用到伪列ROWNUM和嵌套查询 我们首先显示前10条记录,语句如下: select rownu...

煌sir
27分钟前
125
0
使用JavaScript获取当前URL? - Get the current URL with JavaScript?

问题: All I want is to get the website URL. 我想要的只是获取网站URL。 Not the URL as taken from a link. 不是从链接获取的URL。 On the page loading I need to be able to grab the ......

技术盛宴
38分钟前
11
0
PHP实战之Cookie会话控制

目录 1. 前言 2. HTTP协议简介及原理 2.1会话控制简介及HTTP浅析 3. COOKIE的使用 3.1 Cookie简介 3.2 cookie使用场景 3.2.1操作cookie思维导图 3.2.2操作cookie代码 3.2.3 setrawcookie的使...

六道木
38分钟前
19
0
Python笔记:批量提取PDF表格数据(每页都含有相同表头的)

现在有一份PDF数据,里面有两页,每页都有相同的数据结构但数据内容不同的数据表(每页都有相同的表头),现在需要使用Python将它批量提取出来。 我们需要使用pdfplumber模块(因为有墙的原因...

tengyulong
50分钟前
29
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部