当前位置:首页 > 网站建设 > 正文内容

帝国cms更换漂亮美观的图形验证码

老威4年前 (2018-03-30)网站建设52570

老威在SEO这一行做了快两年了,使用帝国cms大概一年半了,之前做的留言反馈都没加过验证码,容易被恶意留言,最近新做的一套网站要用到这个功能,觉得帝国cms的图形验证码有点扎眼,就顺手在重新写了下,外观比之前漂亮,同时使用弧线和直线,增强了干扰能力;双击图片可以不刷新页面更换验证码,默认的需要刷新页面。

帝国cms更换美观的图形验证码

使用方法:

1.将e文件直接复制到网站根目录;

2.开启 网站后台->系统参数->用户设置->会员登陆验证码和会员注册验证码;

3.不要设置 网站后台->系统参数->基本属性->验证码配色 保持最初默认值即可;

4.(可选)设置完后,认证码图片会比input输入框高可以用下面代码替换 ,同时用onclick不刷新页面更换验证码,兼容帝国7.0、7.2以及7.5版本。

模版->动态页面模版管理->会员登录页面

源代码:<img src="../../ShowKey/?v=login"/>

修改为:<img src="../../ShowKey/?v=login" onclick="javascript:this.src='../../ShowKey/?v=login&tm=+Math.random();'"  style="vertical-align:middle"/> <span style="color:#666;vertical-align:bottom">  (点击图片更换)</span>

代码下载:链接:https://pan.baidu.com/s/1xeU_LzSlk3CVuL9Fh41SCg 密码:nzv0

贴出源代码供学习交流:

<?php
require('../class/connect.php');
//取得随机数
function domake_password($pw_length){
        global $public_r;
        if($public_r['keytog']==1)//字母
        {
                $low_ascii_bound=65;
                $upper_ascii_bound=90;
                $notuse=array(91);
        }
        elseif($public_r['keytog']==2)//数字+字母
        {
                $low_ascii_bound=50;
                $upper_ascii_bound=90;
                $notuse=array(58,59,60,61,62,63,64,73,79);
        }
        else//数字
        {
                $low_ascii_bound=48;
                $upper_ascii_bound=57;
                $notuse=array(58);
        }
        while($i<$pw_length)
        {
                mt_srand((double)microtime()*1000000);
                $randnum=mt_rand($low_ascii_bound,$upper_ascii_bound);
                if(!in_array($randnum,$notuse))
                {
                        $password1=$password1.chr($randnum);
                        $i++;
                }
        }
        return $password1;
}
//返回颜色
function ReturnShowKeyColor($img){
        global $public_r;
        //背景色
        if($public_r['keybgcolor'])
        {
                $bgcr=ToReturnRGB($public_r['keybgcolor']);
                $r['bgcolor']=imagecolorallocate($img,$bgcr[0],$bgcr[1],$bgcr[2]);
        }
        else
        {
                $r['bgcolor']=imagecolorallocate($img,245,rand(225,255),225);
        }
        //文字色
        if($public_r['keyfontcolor'])
        {
                $fcr=ToReturnRGB($public_r['keyfontcolor']);
                $r['fontcolor']=ImageColorAllocate($img,$fcr[0],$fcr[1],$fcr[2]);
        }
        else
        {
                $r['fontcolor']=ImageColorAllocate($img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
        }
        //干扰色
        if($public_r['keydistcolor'])
        {
                $dcr=ToReturnRGB($public_r['keydistcolor']);
                $r['distcolor']=ImageColorAllocate($img,$dcr[0],$dcr[1],$dcr[2]);
        }
        else
        {
                $r['distcolor']=ImageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
        }
        return $r;
}
//显示验证码
function ShowKey($v){
        $vname=ecmsReturnKeyVarname($v);
        $key=strtolower(domake_password(4));
        ecmsSetShowKey($vname,$key);
        //是否支持gd库
        if (function_exists("imagegif")) 
        {
                header("Content-type: image/gif");
                $img=imagecreate(80,26);
                $colorr=ReturnShowKeyColor($img);
                $bgcolor=$colorr['bgcolor'];
                $fontcolor=$colorr['fontcolor'];
                $distcolor=$colorr['distcolor'];
                imagefill($img,0,0,$bgcolor);
                
                for($i=0;$i<90;$i++) //加入干扰象素
                {
                        imagesetpixel($img,rand()%70,rand()%30,$distcolor);
                }
                for($i=0;$i<8;$i++){//加入干扰弧线
                imagearc ($img,rand(0,360),rand(0,360),rand(200,350),rand(200,360),10,10,imagecolorallocate($img, rand(0,225), rand(0,225),rand(0,225)));
                }
        for($i=0;$i<4;$i++){//加入干扰直线
                imageline ($img,rand(0,2),rand(0,27),rand(80,80),rand(1,28),imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)));
                }
                for($i=0;$i<4;$i++){
                 $charcolor=imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
                 imagettftext ($img,rand(12,16),rand(-30,30),$i*20+2,rand(16,22),$charcolor,"STENCIL.TTF",$key[$i]);
                }
                imagegif($img);
                imagedestroy($img);
        }
        elseif(function_exists("imagejpeg")) 
        {
                header ("Content-type: image/jpeg");
                $img=imagecreate(80,26);
                $colorr=ReturnShowKeyColor($img);
                $bgcolor=$colorr['bgcolor'];
                $fontcolor=$colorr['fontcolor'];
                $distcolor=$colorr['distcolor'];
                imagefill($img,0,0,$bgcolor);
                
                for($i=0;$i<90;$i++) //加入干扰象素
                {
                        imagesetpixel($img,rand()%70,rand()%30,$distcolor);
                }
                for($i=0;$i<8;$i++){//加入干扰弧线
                imagearc ($img,rand(0,360),rand(0,360),rand(200,350),rand(200,360),10,10,imagecolorallocate($img, rand(0,225), rand(0,225),rand(0,225)));
                }
        for($i=0;$i<4;$i++){//加入干扰直线
                imageline ($img,rand(0,2),rand(0,27),rand(80,80),rand(1,28),imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)));
                }
                for($i=0;$i<4;$i++){
                 $charcolor=imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
                 imagettftext ($img,rand(12,16),rand(-30,30),$i*20+2,rand(16,22),$charcolor,"STENCIL.TTF",$key[$i]);
                }
                imagejpeg($img);
                imagedestroy($img);
        }
        elseif (function_exists("imagepng"))
        {
                header ("Content-type: image/png");
                $img=imagecreate(80,26);
                $colorr=ReturnShowKeyColor($img);
                $bgcolor=$colorr['bgcolor'];
                $fontcolor=$colorr['fontcolor'];
                $distcolor=$colorr['distcolor'];
                imagefill($img,0,0,$bgcolor);
                
                for($i=0;$i<90;$i++) //加入干扰象素
                {
                        imagesetpixel($img,rand()%70,rand()%30,$distcolor);
                }
                for($i=0;$i<8;$i++){//加入干扰弧线
                imagearc ($img,rand(0,360),rand(0,360),rand(200,350),rand(200,360),10,10,imagecolorallocate($img, rand(0,225), rand(0,225),rand(0,225)));
                }
        for($i=0;$i<4;$i++){//加入干扰直线
                imageline ($img,rand(0,2),rand(0,27),rand(80,80),rand(1,28),imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)));
                }
                for($i=0;$i<4;$i++){
                 $charcolor=imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
                 imagettftext ($img,rand(12,16),rand(-30,30),$i*20+2,rand(16,22),$charcolor,"STENCIL.TTF",$key[$i]);
                }
                imagepng($img);
                imagedestroy($img);
        }
        
        elseif (function_exists("imagewbmp")) 
        {
                header ("Content-type: image/vnd.wap.wbmp");
                $img=imagecreate(80,26);
                $colorr=ReturnShowKeyColor($img);
                $bgcolor=$colorr['bgcolor'];
                $fontcolor=$colorr['fontcolor'];
                $distcolor=$colorr['distcolor'];
                imagefill($img,0,0,$bgcolor);
                
                for($i=0;$i<90;$i++) //加入干扰象素
                {
                        imagesetpixel($img,rand()%70,rand()%30,$distcolor);
                }
                for($i=0;$i<8;$i++){//加入干扰弧线
                imagearc ($img,rand(0,360),rand(0,360),rand(200,350),rand(200,360),10,10,imagecolorallocate($img, rand(0,225), rand(0,225),rand(0,225)));
                }
        for($i=0;$i<4;$i++){//加入干扰直线
                imageline ($img,rand(0,2),rand(0,27),rand(80,80),rand(1,28),imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156)));
                }
                for($i=0;$i<4;$i++){
                 $charcolor=imagecolorallocate($img, mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
                 imagettftext ($img,rand(12,16),rand(-30,30),$i*20+2,rand(16,22),$charcolor,"STENCIL.TTF",$key[$i]);
                }
                imagewbmp($img);
                imagedestroy($img);
        }
        else
        {
                ecmsSetShowKey($vname,'ecms');
                echo ReadFiletext("../data/images/ecms.gif");
        }
}
//返回变量名
function ecmsReturnKeyVarname($v){
        if($v=='login')//登陆
        {
                $name='checkloginkey';
        }
        elseif($v=='reg')//注册
        {
                $name='checkregkey';
        }
        elseif($v=='info')//信息
        {
                $name='checkinfokey';
        }
        elseif($v=='spacefb')//空间反馈
        {
                $name='checkspacefbkey';
        }
        elseif($v=='spacegb')//空间留言
        {
                $name='checkspacegbkey';
        }
        elseif($v=='gbook')//留言
        {
                $name='checkgbookkey';
        }
        elseif($v=='feedback')//反馈
        {
                $name='checkfeedbackkey';
        }
        elseif($v=='getpassword')//取回密码
        {
                $name='checkgetpasskey';
        }
        elseif($v=='regsend')//重发激活邮件
        {
                $name='checkregsendkey';
        }
        else//评论pl
        {
                $name='checkplkey';
        }
        return $name;
}
$v=$_GET['v'];
ShowKey($v);
?>


扫描二维码至手机访问

扫描二维码推送至手机访问。

版权声明:本文由老威SEO发布,如需转载请注明出处。

转载请注明出处:http://www.lwseo.cn/wzjs/72.html

标签: 帝国cms
分享给朋友:

相关文章

dedecms怎么批量修改内容的发布时间

dedecms怎么批量修改内容的发布时间

当我们用织梦cms结合老域名伪造一个老站的时候,可以按照域名的年龄批量修改文章的发布时间。在数据库执行以下命令,第二行是起始时间,第三行是结束时间。/*************************...

教你写一个简单的自适应css,根据分辨率调用不同的图片

教你写一个简单的自适应css,根据分辨率调用不同的图片

前两天仿了一个站,但是有很多不如意的地方,比如自适应的问题,我想根据它的分辨率调用不同的样式,在PC端调用图片1在移动端调用图片2,一开始以为通过js可以解决,但是网上翻了半天没找出一个正儿八经的解决...

帝国cms前台定时刷新插件以及sql语句

帝国cms前台定时刷新插件以及sql语句

我们做定时刷新的好处就是能让蜘蛛来这个页面总能抓到不同的内容,这样的话也有利于SEO优化,其实相比之前做轮链更好,但是这得基于一个平台二次开发一下,无奈老威编程辣鸡,先用着定时刷新乐呵乐呵得了。废话不...

织梦dedecms制作sitemap网站地图最简单的方法

织梦dedecms制作sitemap网站地图最简单的方法

果然各类资料还是要整理的,之前玩dedecms各种插件都有搞过,但是再做新站遇到问题还是得度娘,所以慢慢就养成一个习惯,遇见问题首先整理到自己的seo博客里面,废话不多说,下面整理了dedecms制作...

帝国cms面包屑导航中的首页两个字怎么更换?

帝国cms面包屑导航中的首页两个字怎么更换?

将面包屑中的“首页”两个字修改成网站目标关键词,可以提高内链锚文本的准确性,理论上讲是有助于SEO,提升目标关键词排名。帝国cms面包屑导航中的首页两个字怎么更换(以下以帝国cms7.2为示例,7.0...

dedecms自定义表单手机号和邮箱加入验证功能及必填项

dedecms自定义表单手机号和邮箱加入验证功能及必填项

我们在使用dedecms织梦程序做网站的时候,经常都会用到自定义表单。因为织梦默认的自定义表单是没有没有对提交的信息进行过滤,经常会有垃圾信息骚扰。这里提供2条检测规则,是利用正则方法,可以检测手机号...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。