SpeedPHP验证码扩展类    
    
        发布于:2022-01-17 09:50:54
    
            
            #1 starlight36            
             此验证码扩展类为标准扩展形式,将两文件放于SpeedPHP/Extensions之下即可。
验证码通过spConfig.php进行设置,样例如下:
'ext' => array(
'spVerifyCode' => array( //验证码扩展
        'width' => 60, //验证码宽度
        'height' => 20, //验证码高度
        'length' => 4, //验证码字符长度
        'bgcolor' => 'FFFFFF', //背景色
        'noisenum' => 50, //图像噪点数量
        'fontsize' => 22, //字体大小
        'fontfile' => 'font.ttf', //字体文件
        'format' => 'gif', //验证码输出图片格式
),
),
生成验证码可以在控制器类中使用如下代码:
function _vcode() {
        $vcode = spClass('spVerifyCode');
        $vcode->display();
}验证验证码的代码示例如下:
function _vcode_check() {
        $vcode = spClass('spVerifyCode');
        if($vcode->verify($this->spArgs('verifycode'))) {
                //通过验证
        }else{
                //没有通过验证
        }
}
另外verify方法还支持第二个参数,值为TRUE/FALSE, 用来决定是否从SESSION中清空本次验证的验证码值
下载:
spVerifyCode.zip 该贴已经同步到 starlight36的微博
 该贴已经同步到 starlight36的微博                
                        2011-02-11 15:39:10                    
         
                
            #2 jake的马甲            
             :handshake 很好,下来先试试,感谢楼主                
                        2011-02-11 16:16:47                    
         
                
            #3 jiayan41            
             跟进jake的马甲中~                
                        2011-02-12 10:24:47                    
         
                
            #4 vsxp            
             跟进,楼主是个高手。                
                        2011-03-10 17:27:44                    
         
                
            #5 ychjasp            
             学习了:(                
                        2011-03-14 10:32:59                    
         
                
            #6 虞飞            
             验证码通过spConfig.php进行设置
但是我在spConfig.php里面加了以上的设置后,程序还依然按照程序内部的public变量来进行运作,这个该怎么处理?                
                        2011-07-02 00:00:07                    
         
                
            #7 jake            
             回复 6 虞飞 或许再看看spConfig的设置,楼主的介绍其实完整来说是这样
'ext' => array(
'spVerifyCode' => array( //验证码扩展
        'width' => 60, //验证码宽度
        'height' => 20, //验证码高度
        'length' => 4, //验证码字符长度
        'bgcolor' => 'FFFFFF', //背景色
        'noisenum' => 50, //图像噪点数量
        'fontsize' => 22, //字体大小
        'fontfile' => 'font.ttf', //字体文件
        'format' => 'gif', //验证码输出图片格式
),
),
这里也帮楼主改了一下帖子,这样会比较明确一些:handshake                
                        2011-07-02 03:49:20                    
         
                
            #8 虞飞            
             感谢jake大大,果然灵验了,哈哈
呃,这个验证码给力啊:办套;P                
                        2011-07-02 04:05:18                    
         
                
            #9 awinds            
             请教下,如果两个页面同时用这个生成验证码图片
那么第一个访问的时候页面会不会验证失败呢?
可否在display的时候给验证码加个ID,这个验证的时候也通过这个ID来验证                
                        2011-07-06 22:47:24                    
         
                
            #10 jake            
             两个页面如果是同一个浏览器同一个用户,那会失效。因为是同一个SESSION,不过这种情况非常少见。
如果是两个用户(或者多个用户)访问同一个页面,那没影响。                
                        2011-07-06 22:53:19                    
         
                
            #11 冥夜            
             两个验证码在同一个页面上呢,我用的论坛的其他的,好像不能在同一个页面上出现两个验证嘛@@@                
                        2011-07-26 18:07:27                    
         
                
            #12 phpha            
             回复 11 冥夜     出现2个验证码应该没问题啊!
只是你别用同一个SESSION名就行了,不然肯定覆盖了……                
                        2011-07-26 18:48:32                    
         
                
            #13 虞飞            
             这个扩展生成的验证码一般在什么情况下会无法生成图片?已经知道GD库有效。                
                        2011-08-30 11:23:25                    
         
                
            #14 jake            
             回复 13 虞飞    在图形显示前代码有输出,比如说bom或者空字符空格之类的                
                        2011-08-30 12:40:14                    
         
                
            #15 虞飞            
             检查过了,所有的PHP文件、HTML大部分都正常,一两个有BOM的文件已经清除,清除了所有的模板缓存。这个验证码类也用原始文件覆盖过了。还是无法显示,还有什么可能性吗?                
                        2011-08-31 01:36:32                    
         
                
            #16 小子210            
             为什么我用的时候,验证码图片里面只有背景没有码呢?                
                        2011-11-22 11:47:46                    
         
                
            #17 jake            
            为什么我用的时候,验证码图片里面只有背景没有码呢?
小子210 发表于 2011-11-22 11:47 
没见过这种情况,看看PHP的GD库装好了没,要不重新找个环境试试                
                        2011-11-22 11:55:36                    
         
                
            #18 小子210            
             回复 17 jake 好了,原来是字体文件没放对地方!:L                
                        2011-11-22 14:22:51                    
         
                
            #19 walalaba            
             怎么让验证码在页面固定位置显示啊??                
                        2012-01-13 11:05:44                    
         
                
            #20 walalaba            
             这个验证码怎么在页面中显示啊,?怎么用啊?   给个帮助吧?                
                        2012-01-30 12:01:44                    
         
                
            #21 sea桥            
              
                
                        2012-02-16 23:00:48                    
         
                
            #22 pengtong            
             搞定了,很好用!就是CSS那里还是对不齐!                
                        2012-04-10 23:49:33                    
         
                
            #23 tomcen            
            jake 发表于 2011-7-2 03:49 
回复 6 虞飞 
jake你修改的代码和楼主给的有区别吗? 我用文件比较工具比较了一下, 没有比较出来不同啊!                
                        2012-07-10 21:32:58                    
         
                
            #24 jake            
            tomcen 发表于 2012-7-10 21:32 
jake你修改的代码和楼主给的有区别吗? 我用文件比较工具比较了一下, 没有比较出来不同啊!
 ...
我没有修改,只是帮忙排版一下。怎么用上了文件比较工具~~~                
                        2012-07-10 21:34:57                    
         
                
            #25 gabacai            
             104行报错,eregi_replace过时了.                
                        2012-10-26 14:47:41                    
         
                
            #26 diannao580            
             为什么我的不行呢                
                        2012-12-23 21:30:09                    
         
                
            #27 zjwking            
             同一页面,有3个验证码,怎么解决?                
                        2013-02-01 00:02:01                    
         
                
            #28 jake            
            zjwking 发表于 2013-2-1 00:02 
同一页面,有3个验证码,怎么解决?
有些麻烦,要设置三个不同的session(这是原理)。
或者建议你这样做,三个验证码都不显示,等用户点击验证码的输入框再通过JS拉到验证码显示(很多网站都是这样做)
题外话:我没见过哪个网站有三个验证码的,嘿嘿                
                        2013-02-01 17:23:35                    
         
                
            #29 zjwking            
            jake 发表于 2013-2-1 17:23 
有些麻烦,要设置三个不同的session(这是原理)。
或者建议你这样做,三个验证码都不显示,等用户点击 ...
我有一个网页,有3个层,每 个层都有一个验证码,登陆验证码,注册验证码,密码取回验证码,呵呵                
                        2013-02-03 21:43:46                    
         
                
            #30 haozhe            
             用浏览器直接访问验证码图片,居然是乱码,这是怎么回事?                
                        2013-03-17 23:41:21                    
         
                
            #31 coolhpy            
             报告一个绕过验证的B U G,大家注意下。见图。

TO Jake,
能否把这个回复直接置顶到主题帖中,以便让更多的朋友可以直接看到这个问题。谢谢!
另外,为什么这样也会说有不良内容啊!!                
                        2013-04-25 23:15:34                    
         
                
            #32 coolhpy            
             郁闷,代码又贴错了。。。下面这个才对!!!
public function verify($var, $is_clear = TRUE) {
        $result = FALSE;
        if (!$this->vc_session && $var == $this->vc_session) {
                $result = TRUE;
                if($is_clear) $this->vc_session = '';
        }
        return $result;
}                
                        2013-04-25 23:17:39                    
         
                
            #33 coolhpy            
             代码里面不能加颜色。。啊啊啊啊,我要疯了!!!
public function verify($var, $is_clear = TRUE) {
        $result = FALSE;
        if (
!$this->vc_session && $var == $this->vc_session) {
                $result = TRUE;
                if($is_clear) $this->vc_session = '';
        }
        return $result;
}                
                        2013-04-25 23:18:52                    
         
                
            #34 coolhpy            
             好吧,我承认我有罪...上面的还是贴错。。。{:soso_e105:}
public function verify($var, $is_clear = TRUE) {
        $result = FALSE;
        if (
!empty($this->vc_session) && $var == $this->vc_session) {
                $result = TRUE;
        }
        if($is_clear) $this->vc_session = '';
        return $result;
}                
                        2013-04-25 23:45:09                    
         
                
            #35 jake            
            coolhpy 发表于 2013-4-25 23:45 
好吧,我承认我有罪...上面的还是贴错。。。
public function verify($var, $is_clear = TRU ...
呵呵,其实不算bug,验证码类是检验验证码是否正确的,
而空值检查,这是一开始要做的,不仅是前端JS要判断验证码是否空值,后端提交后也必须要验证是否空值,之后才开始做验证码的检查。
简单说,必填项要首先做检查,然后再到特殊检查。建议必填项的检查使用spVerifier进行。                
                        2013-04-26 09:00:40                    
         
                
            #36 jake            
            coolhpy 发表于 2013-4-25 23:15 
报告一个绕过验证的B U G,大家注意下。见图。
呵呵,其实不算bug,验证码类是检验验证码是否正确的,
而空值检查,这是一开始要做的,不仅是前端JS要判断验证码是否空值,后端提交后也必须要验证是否空值,之后才开始做验证码的检查。
简单说,
必填项要首先做检查,然后再到特殊检查(比如说验证码,匹配等)。建议必填项的检查使用spVerifier进行。
PS:原来回复可以顶置的哦,没用过呢。                
                        2013-04-26 09:01:43                    
         
                
            #37 coolhpy            
             :lol 其实我发了帖子之后,也想到这个问题了,,不过想想一下子已经发了四个帖子,就不在回了,,多个保险也好,省的有些和我一样想偷懒的人也犯这样的错~                
                        2013-04-26 09:26:58                    
         
                
            #38 jake            
            coolhpy 发表于 2013-4-26 09:26 
其实我发了帖子之后,也想到这个问题了,,不过想想一下子已经发了四个帖子,就不在回了,,多个保险 ...
是啊,已经顶置了。                
                        2013-04-26 09:51:45                    
         
                
            #39 和珅            
             好东西,收下了                
                        2013-05-06 16:09:10                    
         
                
            #40 cherry            
             我把字体放大及高度调整后怎么不起作用?在spConfig.php中设定的                
                        2013-05-15 16:55:22                    
         
                
            #41 开心鬼            
             弄了半天验证码不显示,调试了一下午。。。。
最后发现是eregi_repalce报错。估计是php版本的问题吧,原先用没事的。
把104行的eregi_repalce('^','',$color)改为preg_replace('/^/', '', $color)就行了。或者改成str_replace杀的都行                
                        2014-01-01 16:08:58                    
         
                
            #42 qq506059300            
             $this->vc_session = &$_SESSION[$GLOBALS['G_SP']['sp_app_id']]['verifycode']                
                        2014-05-28 10:05:23                    
         
                
            #43 qq506059300            
             $this->vc_session = &$_SESSION[$GLOBALS['G_SP']['sp_app_id']]['verifycode']
这句话没看懂,请大侠指教                
                        2014-05-28 10:09:53                    
         
                
            #44 527802614            
             感谢分享,感谢分享。                
                        2016-03-03 22:09:40                    
         
                
            #45 hxy100            
             php5.3以上支持有问题啊,即便把eregi_replace改成preg_replace还是有问题,啥也不显示,打开报错,还是一样的,啥报错信息都没有                
                        2016-04-16 13:14:06                    
         
                
            #46 278086346            
            想问下,这个不支持5.4以上,否则验证码出错,求解,怎么让他支持PHP高版本                
                        2017-07-31 14:13:47                    
         
                
            #47 278086346            
            想问下,这个不支持5.4以上,否则验证码出错,求解,怎么让他支持PHP高版本                
                        2017-07-31 14:13:46