程序员人生 网站导航

打造PHPCMS的个性验证码(修改攻略)

栏目:DedeCMS时间:2014-05-21 13:30:43

网(LieHuo.Net)教程 论坛逛久了,发现很多人对phpcms默认的验证码不满意,下面结合我的经验,谈谈phpcms验证码修改方法(适于所有版本)。

phpcms2008sp2为例,主要是修改根目录下的checkcode.php文件。
下面提到的行数是相对官方原版checkcode.php文件,如你已改过该文件,请搜索对应代码修改即可。

1、修改验证码背景图片的大小:
找到3132
$imageX = strlen($radomstring)*8;  //
验证码图片的宽度,修改成你需要的值

$imageY = 20;  //
验证码图片的高度,修改成你需要的值

2、修改验证码背景图片的背景色:
找到46行:imagefill($im, 0, 0, imagecolorallocate($im, 250, 253, 254));
修改第二个()里的三个数字为你需要的背景颜色(色彩三原色,其值从 0 255)。

3、修改验证码的位数:
以修改为5位为例(默认是4位),找到第48-51
imagettftext($im, 12, rand(30, -30), 5, rand(14, 16), $foregroundArr[rand(0,3)], PHPCMS_ROOT.'include/fonts/ALGER.TTF', $string[0]);
imagettftext($im, 12, rand(50, -50), 20, rand(14, 16), $foregroundArr[rand(0,3)], PHPCMS_ROOT.'include/fonts/ARIALNI.TTF', $string[1]);

imagettftext($im, 12, rand(50, -50), 35, rand(14, 16), $foregroundArr[rand(0,3)], PHPCMS_ROOT.'include/fonts/ALGER.TTF', $string[2]);

imagettftext($im, 12, rand(30, -30), 50, rand(14, 16), $foregroundArr[rand(0,3)], PHPCMS_ROOT.'include/fonts/arial.ttf', $string[3]);
      
1)增加一行,并将相关变量数值增加
imagettftext($im, 12, rand(30, -30), 5, rand(14, 16), $foregroundArr[rand(0,4)], PHPCMS_ROOT.'include/fonts/ALGER.TTF', $string[0]);

imagettftext($im, 12, rand(50, -50), 20, rand(14, 16), $foregroundArr[rand(0,4)], PHPCMS_ROOT.'include/fonts/ARIALNI.TTF', $string[1]);

imagettftext($im, 12, rand(50, -50), 35, rand(14, 16), $foregroundArr[rand(0,4)], PHPCMS_ROOT.'include/fonts/ALGER.TTF', $string[2]);

imagettftext($im, 12, rand(30, -30), 50, rand(14, 16), $foregroundArr[rand(0,4)], PHPCMS_ROOT.'include/fonts/arial.ttf', $string[3]);

imagettftext($im, 12, rand(30, -30), 65, rand(14, 16), $foregroundArr[rand(0,4)], PHPCMS_ROOT.'include/fonts/arial.ttf', $string[4]);

2修改第29$_SESSION['checkcode'] = $string = substr($radomstring,0,4); //only display 4 str
$_SESSION['checkcode'] = $string = substr($radomstring,0,5); //only display 5 str
3)修改第28$radomstring = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4];
$radomstring = $const[0] . $vow[0] .$const[2] . $const[1] . $vow[1] . $const[3] . $vow[3] . $const[4]. $const[5];
通过以上三步即可修改验证码的位数,以此类推可将验证码修改成678等多位。注:验证码位数过多时,可能只显示前几位,这时要把验证码背景图片的宽度设宽点。

4、修改验证码字体大小和样式:
找到第48-51行,每一行控制一个验证码字符的样式(以第48行为例,即第一个验证码字符):
imagettftext($im, 12, rand(30, -30), 5, rand(14, 16), $foregroundArr[rand(0,3)], PHPCMS_ROOT.'include/fonts/ALGER.TTF', $string[0]);

说明:修改验证码字体大小和样式时,可能显示不全,这时需要综合调整下述几点的参数及验证码背景图片的宽度和高度等。      
1)修改验证码字体大小:
第48行imagettftext($im, 12, 中的“12”即为字体大小,数值越大字体越大
2)修改验证码字符的左右倾斜度:
第48行imagettftext($im, 12, rand(30, -30), 中的“rand(30, -30) 为验证码字符的左右倾斜度,调整括号里面的数字可改变字符向左和向右的倾斜程度。
3)修改验证码字符间的距离:
第48行imagettftext($im, 12, rand(30, -30), 5,中的“5”为每个验证码字符离左侧的距离,通过改变数值看调整每个验证码间的距离。
4)修改验证码字符的上下漂移度:
第48行imagettftext($im, 12, rand(30, -30), 5, rand(14, 16),中的“rand(14, 16) 为验证码字符的上下漂移度,调整括号里面的数字可改变字符向上和向下的漂移程度。
5)修改验证码的字体:
第48行PHPCMS_ROOT.'include/fonts/ALGER.TTF',中的“ALGER.TTF”为每个验证码字符的字体,存放在include/fonts文件夹中,把你喜欢的字体文件放在该文件夹,然后修改对应的行即可。

5、修改验证码图片边框颜色:
找到第55行:$border = imagecolorallocate($im, 133, 153, 193);修改()里的三个数字为你需要的边框颜色

6、修改上的小点的颜色:
找到第59行:$pointcol = imagecolorallocate($im, rand(0,255), rand(0,255), rand(0,255));修改()里的数字为你需要的小点颜色范围

7、其他修改:
以上讲到的六点是比较实用的,至于其他的修改(如:验证码字母和数字内容、图像分配颜色、随机显示的线段和椭圆等)这里就不一一累述。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐