平时在浏览网页的过程中,不论是会员登录也好,提交数据也好,通常都会用到验证码验证。今天就来简单的实现一下验证码的功能。
首页如果要写验证码功能的话,我们的PHP必须有GD扩展库的支持。如果是集成安装的本地服务器环境是默认开启的,如果是单独安装的php的话,那么就要手动的去php.ini里面去开启GD库,才可以书写验证码功能。因为验证码通常是以图片的形式存在的,所以要开通GD扩展库来支持php对画图的操作。如果不知道自己有没有开启,可以使用phpinfo()这个函数去查找。看是否有下图,如果有那就证明你的php已经开启了对GD库的支持。
那接下来我们就可以创建一个php文件,来完成验证码功能的类。
//首页创建一个类
class Captcha
{
//创建一个验证码方法
public function getCaptcha(){
//首页先把要作为验证码的字母数字等组织出来
// $string = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
//然后再把0,1,l,O去掉,因为在有些字体里这几个字符很像,会让使用者分不清
$string = '23456789abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ';
//然后使用循环把取出一个4位的随机的一串字符
$code = '';
//我以4位字符打比方,当然如果想要多一点的话也可以,就把$i循环的次数增加到想要的位数就可以了
for($i = 0;$i<4;$i++){
//上面作为验证码的字符串一共有58个字符,这里用随机数来随机获取
$ind = mt_rand(0,57);
//用随机获取的数值作为下标来获取字符然后再添加到$code里组成一个四位的随机字符串
$code .= $string[$ind];
}
//这样,验证码的就已经出来了,然后我们只要把它放到图片上就可以了
//添加session存储
//开启session机制
session_start();
//把验证码存储到$_SESSION中去
$_SESSION['code'] = $code;
//首页创建一块长100,宽30的画布
$img = imagecreatetruecolor(100,30);
//再创建一个画布的背景颜色,颜色随机,尽量淡一些的颜色
$bg = imagecolorallocate($img,mt_rand(180,255),mt_rand(180,255),mt_rand(180,255));
//再填充画布,这样就可以获取一块有背景颜色的画布了
imagefill($img,0,0,$bg);
//然后再把验证码获取的每一个字符以不同的颜色放置到画布上去组成一幅图片
for($j=0;$j<4;$j++){
//字体的颜色可以深一些,这样才会有别于背景颜色
$color = imagecolorallocate($img,mt_rand(100,200),mt_rand(100,200),mt_rand(100,200));
//这里关于字体的引入必须要使用绝对路径,但由于项目也许会移动,所以我们用一个相对路径,然后用
//realpath()函数来转换成绝对路径
imagettftext($img,mt_rand(18,26),mt_rand(-20,30),18*($j+1),26,$color,realpath('./ALGER.TTF'),$code[$j]);
}
//输出图片
header('Content-type:image/jpeg');
imagejpeg($img);
}
}
最终的效果就如下图:
这样验证码就完成了。那么验证码完成后要如何进行验证呢?因为我们最后输出的是图片,总不能把我们输入的字符与图片进行对比吧,这时我们就需要使用php的另外一项功能了,就是session机制。我们使用session机制来把生成生成的验证码存储起来,这样就可以在验证的时候通过$_SESSION来获取到当前验证码的值。让我们回到上面的代码,在代码中把session存储加进去。在验证码完成之后,图片生成之前,把session加进去。这样就通过session来进行验证码验证了。