首先,在项目目录下创建Class文件夹,用于存储个人类文件。
之后建立Data目录存放所需字体文件,其他的数据也可以放在这个文件夹下。
然后再Conf文件夹下创建verify.php配置文件。
在config.php文件中引用verify.php配置文件。
代码入下:
//加载验证码配置
'LOAD_EXT_CONFIG' => 'verify',
要使用Class文件夹下的类,要这么引用:
//引入自定义验证码类
import('Class.ValidateCode', APP_PATH);
ValidateCode::doVerify();
效果:
使用的验证码类,以及配置文件:
配置文件:
<?php
return array(
//验证配置
'charset' => 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789',//随机因子
'codelen' => 4, //验证码长度
'width' => 130, //宽度
'height' => 50, //高度
'font' => './App/Data/QDB.otf', //指定的字体
'fontsize' => 30, //指定字体大小
'verifyName' => 'verify', //session中验证码键值
);
验证码类:
<?php
//验证码类
class ValidateCode { /**
* 生成验证码
* @return [type] [description]
*/
static function doVerify() {
//属性
$img;
$charset = C('charset');//随机因子
$codelen = C('codelen');//验证码长度
$width = C('width');//宽度
$height = C('height');//高度
$font = C('font');//指定的字体
$fontsize = C('fontsize');//指定字体大小
$verifyName = C('verifyName');//session中验证码键值 //生成随机码
$_len = strlen($charset)-1;
for ($i=0;$i<$codelen;$i++) {
$code .= $charset[mt_rand(0,$_len)];
} //生成背景
$img = imagecreatetruecolor($width, $height);
$color = imagecolorallocate($img, mt_rand(157,255), mt_rand(157,255), mt_rand(157,255));
imagefilledrectangle($img,0,$height,$width,0,$color); //生成文字
$_x = $width / $codelen;
for ($i=0;$i<$codelen;$i++) {
$fontcolor = imagecolorallocate($img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imagettftext($img,$fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$height / 1.4,$fontcolor,$font,$code[$i]);
} //生成线条、雪花
//线条
for ($i=0;$i<6;$i++) {
$linecolor = imagecolorallocate($img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
imageline($img,mt_rand(0,$width),mt_rand(0,$height),mt_rand(0,$width),mt_rand(0,$height),$linecolor);
}
//雪花
for ($i=0;$i<30;$i++) {
$snowcolor = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
imagestring($img,mt_rand(1,5),mt_rand(0,$width),mt_rand(0,$height),'.',$snowcolor);
} //创建session
//生成小写验证码进行md5加密,并存于session
$_SESSION[$verifyName] = md5(strtolower($code)); //输出
header('Content-type:image/png');
imagepng($img);
imagedestroy($img);
}
}