制作简单安全的php验证码类代码实例
本站收录这篇文章制作简单安全的php验证码类代码实例,详细解说文章中相关验证码安全技术与知识,欢迎能给大家一些在这方面的支持和帮助!下面是详细内容:
一,php验证码类,secoderlass.php
程序代码(For Alixixi)如下:
<?php
/**
*安全验证码
*
*安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码
*
* author流水孟春<cmpan(at)qq>
* link labs.yulansn/YL_Security_Secoder
* link wiki.yulansn/docs/yl/security/secoder
*/
class YL_Security_Secoder
if(self::$useCurve)
//绘验证码
$code=array();//验证码
$codeNX=0;//验证码第N个字符的左边距
for($i=0;$i<self::$length;$i++)
//保存验证码
isset($_SESSION)session_start();
$_SESSION[self::$seKey]['code']=join('',$code);//把校验码保存到session
$_SESSION[self::$seKey]['time']=time();//验证码创建时间
header('CacheControl:private,maxage=0,nostore,nocache,mustrevalidate');
header('CacheControl:postcheck=0,precheck=0',false);
header('Pragma:nocache');
header("contenttype:image/png");
//输出图像
imagepng(self::$_image);
imagedestroy(self::$_image);
}
/**
*画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数)
*
*高中的数学公式咋都忘了涅,写出来
*正弦型函数解析式:y=Asin(ωx+φ)+b
*各常数值对函数图像的影响:
*A:决定峰值(即纵向拉伸压缩的倍数)
*b:表示波形在Y轴的位置关系或纵向移动距离(上加下减)
*φ:决定波形与X轴位置关系或横向移动距离(左加右减)
*ω:决定周期(最小正周期T=2π/∣ω∣)
*
*/
protected static function _writeCurve()
}
}
$A=mt_rand(1,self::$imageH/2);//振幅
$f=mt_rand(self::$imageH/4,self::$imageH/4);//X轴方向偏移量
$T=mt_rand(self::$imageH*1.5,self::$imageL*2);//周期
$w=(2*M_PI)/$T;
$b=$py$A*sin($w*$px+$f)self::$imageH/2;
$px1=$px2;
$px2=self::$imageL;
for($px=$px1;$px<=$px2;$px=$px+0.9)
}
}
}
/**
*画杂点
*往图片上写不同颜色的字母或数字
*/
protected static function _writeNoise()
}
}
/**
*验证验证码是否正确
*
* param string$code用户验证码
* param bool用户验证码是否正确
*/
public static function check($code)
//session过期
if(time()$_SESSION[self::$seKey]['time']>self::$expire)
//if($code==$_SESSION[self::$seKey]['code'])
//echo$_SESSION[self::$seKey]['code'].'4';
return false;
}
}
//useage
/*
YL_Security_Secoder::$useNoise=false;//要更安全的话改成true
YL_Security_Secoder::$useCurve=true;
YL_Security_Secoder::entry();
*/
/*
//验证验证码
if(!YL_Security_Secoder::check( $_POST['secode']))
*/
二,调用方法
1,显示验证码页面code.php
程序代码(For Alixixi)如下:
<?php
session_start();
require'secoderlass.php';//先把类包含进来,实际路径根据实际情况进行修改。
$vcode=new YL_Security_Secoder();//实例化一个对象
$vcode>entry();
?>
2,检查验证码是否正确
程序代码(For Alixixi)如下:
<?php
session_start();
require'secoderlass.php';//先把类包含进来,实际路径根据实际情况进行修改。
$vcode=new YL_Security_Secoder();//实例化一个对象
//$vcode>entry();
$code=$_GET['code'];
echo$vcode>check($code);
//$_SESSION['code']=$vc>getCode();//验证码保存到SESSION中
?>
3,验证码输入框调用页面
程序代码(For Alixixi)如下:
<img id="messageImg"src='images/tishis2.gif'width='16'height='16'>单击图片重新获取验证码<br>
<a href="#"><img src="code.php"onclick="javascript:this.src='code.php?tm='+Math.rand();"/>
上一篇:百度编辑器(Ueditor)在织梦DedeCMS系统中图片无水印解决办法
下一篇:Dedecms友情链接/uploads/fli<x>nk/不显示正确的图片路径错误
php验证码