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>';    //输出失败的输入信息
        }
    }
?>
 

PHP雪花背景验证码的更多相关文章

  1. 制作炫酷雪花背景的jQuery插件

    插件使用十分简单,代码已经放至我的GitHub,大家可以下载以及使用或者更新改进代码. HTML代码源码: <!DOCTYPE html> <html> <head> ...

  2. 如何解决php 生成验证码图片不显示问题

    最近遇到一个问题,就是验证码在别人的电脑上可以显示,但是我自己的电脑上去不能.原因找了好久,哈哈,终于找到了!现在给大家分享一下: 程序: <?php $w = 80; //设置图片宽和高 $h ...

  3. php 图形验证码的3种方法

    生成图形验证码需要使用php GD库来生成,如果你没开户GD库我们需要在php.ini文件找到extension=php_gd2.dll 去掉前面的;就行了,然后重启apache 或iis环境即可 检 ...

  4. 一个好看的php验证码源码

    <?php     $w = 80; //设置图片宽和高 $h = 26; $str = Array(); //用来存储随机码 $string = "ABCDEFGHIJKLMNOPQ ...

  5. PHP 图形验证码

    一段生成图形验证码的代码,向原创作者致谢. 1.将以下代码保存为 txm.php ,注:直接运行该页面是没有结果的,要用另一页面引用,请看步骤2 <?php session_start(); $ ...

  6. 在ASP.NET中使用一般处理程序生成验证码

    如果期望一般处理程序(ashx)处理Session,必须实现[System.Web.SessionState]命名空间下的[IRequiresSessionState]接口. asp.net中的验证码 ...

  7. python 基于机器学习识别验证码

    1.背景    验证码自动识别在模拟登陆上使用的较为广泛,一直有耳闻好多人在使用机器学习来识别验证码,最近因为刚好接触这方面的知识,所以特定研究了一番.发现网上已有很多基于machine learni ...

  8. 图像里的"白噪声"——电视机搜不到台时雪花斑点的形成原因

    作者:❄️固态二氧化碳❄️ (主页) 链接:图像里的"白噪声"--电视机搜不到台时雪花斑点的形成原因 - 固态二氧化碳的博客 - CSDN博客 来源:CSDN博客 发表时间:201 ...

  9. JavaWeb-SpringBoot_使用MySQL管理用户登录注册+接入腾讯短信SDK_demo

    使用Gradle编译项目 传送门 项目已托管到Github上 传送门 JavaWeb-SpringBoot_一个类实现腾讯云SDK发送短信 传送门 用户注册 用户并非一定要输入正确的手机验证码去激活当 ...

随机推荐

  1. matlab中fopen 和 fprintf函数总结

    matlab中fopen函数在指定文件打开的实例如下: *1)"fopen"打开文件,赋予文件代号. 语法1:FID= FOPEN(filename,permission) 用指定 ...

  2. 掌握GCD以及后台永久运行的代码 (使用GCD处理后台线程和UI线程的交互)

    一个例子: 在iPhone上做一个下载网页的功能,就是:在iPhone上放一个按钮,单击按钮时,显示一个转动的圆圈,表示正在进行下载,下载完成后,将内容加载到界面上的一个文本控件上. 使用GCD前: ...

  3. iOS中plist的创建,数据写入与读取

    iOS中plist的创建,数据写入与读取 Documents:应用将数据存储在Documents中,但基于NSuserDefaults的首选项设置除外Library:基于NSUserDefaults的 ...

  4. Opencv step by step - 阈值化

    Opencv里面的阈值化做起来比较简单,只需要一个函数即可: /* Applies fixed-level threshold to grayscale image. This is a basic ...

  5. 20145222黄亚奇《Java程序设计》第9周学习总结

    20145222第九周<Java学习笔记>学习总结 教材学习内容总结 数据库本身是个独立运行的应用程序 撰写应用程序是利用通信协议对数据库进行指令交换,以进行数据的增删查找 JDBC(Ja ...

  6. WampServer下使用多端口访问

    因为学习中要用到跨域请求,所以不得不在wamp集成环境下添加多站点服务. 1.首先你要确保已经正确安装了wamp. 2.接着在wamp的安装目录下找到Apache2的httpd.conf文件,比如我的 ...

  7. 图片ping、JSONP和CORS跨域

    置顶文章:<纯CSS打造银色MacBook Air(完整版)> 上一篇:<由外边距合并到BFC> 作者主页:myvin 博主QQ:851399101(点击QQ和博主发起临时会话 ...

  8. 论Visual Studio和.NET Framework

    今天在工作的时候听到一席谈话感觉有点不可思议,微软真的是把开发人员惯的有点傻了,微软流水线式的产品让很多开发者认定了"唯一",这当然也说明了微软的成功,不扯太多题外话,今天只是简单 ...

  9. impdp使用

    创建一个dir,dump_dir1,将备份文件放在下面 impdp szfetsc_card/123456 directory=dump_dir1 dumpfile=130912.dmp REMAP_ ...

  10. SequoiaDB 系列之三 :SequoiaDB的高级功能

    上一篇简单描述了一下SequoiaDB的简单CRUD操作,本篇将讲述一下稍微高级点的功能. 部署在我机器上的集群环境,在经过创建名字为"foo"的cs,创建名字为"bar ...