PHP制作图形验证码
验证码使用场景
我们在开发系统的过程中,基本所有的系统都会涉及到登录模块,其中验证码功能是这里面必不可少的一块,是防止系统被爆破的有效途径。所谓道高一尺魔高一丈,现在的验证码越来越复杂先进,常见的字母数字验证码,行为验证码。本文详细介绍简单的字母数字验证码。
创新互联于2013年成立,是专业互联网技术服务公司,拥有项目成都做网站、网站设计网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元朔城做网站,已为上家服务,为朔城各地企业和个人服务,联系电话:13518219792
代码
font = '/outputs/font/font.ttf';
}
//创建4个随机码
private function createCode()
{
$_leng = strlen($this->charset) - 1;
for ($i = 1; $i <= $this->codelen; $i++) {
$this->code .= $this->charset[mt_rand(0, $_leng)];
}
// session_start();
// $_SESSION['VerifyCode'] = strtolower($this->code);
Session::set('VerifyCode', strtolower($this->code));
return $this->code;
}
//创建背景
private function createBg()
{
//创建画布 给一个资源jubing
$this->img = imagecreatetruecolor($this->width, $this->height);
//背景颜色
$color = imagecolorallocate($this->img, mt_rand(157, 255), mt_rand(157, 255), mt_rand(157, 255));
//画出一个矩形
imagefilledrectangle($this->img, 0, $this->height, $this->width, 0, $color);
}
//创建字体
private function createFont()
{
$_x = ($this->width / $this->codelen); //字体长度
for ($i = 0; $i < $this->codelen; $i++) {
//文字颜色
$color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
//资源句柄 字体大小 倾斜度 字体长度 字体高度 字体颜色 字体 具体文本
imagettftext($this->img, $this->fontsize, mt_rand(-30, 30), $_x * $i + mt_rand(1, 5), $this->height / 1.4, $color, $this->font, $this->code[$i]);
}
}
//随机线条
private function createLine()
{
//随机线条
for ($i = 0; $i < 6; $i++) {
$color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
}
//随机雪花
for ($i = 0; $i < 45; $i++) {
$color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color);
}
}
//输出背景
private function outPut()
{
//生成标头
header('Content-type:image/png');
//输出图片
imagepng($this->img);
//销毁结果集
imagedestroy($this->img);
}
//对外输出
public function doimg()
{
//加载背景
$this->createBg();
//加载文件
$this->createCode();
//加载线条
$this->createLine();
//加载字体
$this->createFont();
//加载背景
$this->outPut();
}
//获取验证码
public function getCode()
{
return strtolower($this->code);
}
//验证验证码
public function checkCode($code, $clear = false)
{
// session_start();
if (Session::get('VerifyCode') == strtolower($code)) {
if($clear) $this->clearCode();
return true;
}
if($clear) $this->clearCode();
return false;
}
//清除验证码
public function clearCode()
{
Session::del('VerifyCode');
// session_start();
// unset ($_SESSION['VerifyCode']);
}
}验证
ob_clean(); $verify = new Code(); $verify->doimg();
这样即可输出如下验证码

可以调整参数控制验证码的大小,干扰项等。
拓展
接下来介绍下拓展的功能,怎么加强验证码的干扰项,怎么结合到项目丽进行登录验证。
1. 加强干扰
首先我们可以看到上面的截图中少数线条,如果外者使用分析工具来解码,那么会很简单的就解出我们的验证码,这时候就需要添加线条的数量,在代码中找到以下代码并修改
//随机线条
private function createLine()
{
//随机线条
for ($i = 0; $i < 6; $i++) {
$color = imagecolorallocate($this->img, mt_rand(0, 156), mt_rand(0, 156), mt_rand(0, 156));
imageline($this->img, mt_rand(0, $this->width), mt_rand(0, $this->height), mt_rand(0, $this->width), mt_rand(0, $this->height), $color);
}
//随机雪花
for ($i = 0; $i < 45; $i++) {
$color = imagecolorallocate($this->img, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255));
imagestring($this->img, mt_rand(1, 5), mt_rand(0, $this->width), mt_rand(0, $this->height), '*', $color);
}
}上面的数字6可以慢慢调整,然后查看效果直到满意。同时可以看到验证码中有很多雪花效果,这个也是干扰项,可以修改上面的数字45来调整到自己满意的结果。
注意:代码中的$charset变量,验证码是从这边随机取字符来生存验证,由于小写的i和L展示的效果很难分辨,所以我们去除了i字符。
2. 接入项目验证
新建个文件,代码如下
doimg();
然后在现有的系统登录页面引入这个接口即可展示验证码,在用户填写提交之后,服务端做以下验证
//验证验证码
public function checkCode($code, $clear = false)
{
if (Session::get('VerifyCode') == strtolower($code)) {
if($clear) $this->clearCode();
return true;
}
if($clear) $this->clearCode();
return false;
}
//清除验证码
public function clearCode()
{
Session::del('VerifyCode');
}以上就是PHP生成图形验证码(加强干扰型)的详细内容,更多请关注创新互联其它相关文章!
网页题目:PHP制作图形验证码
转载来于:http://www.jxjierui.cn/article/ihoopd.html


咨询
建站咨询
