一个简洁平安的PHP验证码类 附调用方法_.docx

上传人:PIYPING 文档编号:11544138 上传时间:2021-08-22 格式:DOCX 页数:13 大小:15.23KB
返回 下载 相关 举报
一个简洁平安的PHP验证码类 附调用方法_.docx_第1页
第1页 / 共13页
一个简洁平安的PHP验证码类 附调用方法_.docx_第2页
第2页 / 共13页
一个简洁平安的PHP验证码类 附调用方法_.docx_第3页
第3页 / 共13页
一个简洁平安的PHP验证码类 附调用方法_.docx_第4页
第4页 / 共13页
一个简洁平安的PHP验证码类 附调用方法_.docx_第5页
第5页 / 共13页
亲,该文档总共13页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《一个简洁平安的PHP验证码类 附调用方法_.docx》由会员分享,可在线阅读,更多相关《一个简洁平安的PHP验证码类 附调用方法_.docx(13页珍藏版)》请在三一文库上搜索。

1、一个简洁平安的PHP验证码类 附调用方法_ 这篇文章主要为大家分享了一个简洁平安的PHP验证码类,附调用方法,感爱好的小伙伴们可以参考一下 一、验证码示例 二、php验证码类,secoder.class.php ?php /* * 平安验证码 * * 平安的验证码要:验证码文字扭曲、旋转,用法不同字体,添加干扰码 * * author 流水孟春 cmpan(at).com * link http:/ * link http:/ */ class YL_Security_Secoder /* * 验证码的session的下标 * * var string */ /public static $s

2、eKey = sid.sek ; public static $seKey = sid; public static $expire = 3000; / 验证码过期时间(s) /* * 验证码中用法的字符,01IO简单混淆,建议不用 * * var string */ public static $codeSet = 346789ABCDEFGHJKLMNPQRTUVWXY; public static $fontSize = 25; / 验证码字体大小(px) public static $useCurve = true; / 是否画混淆曲线 public static $useNoise

3、= true; / 是否添加杂点 public static $imageH = 0; / 验证码图片宽 public static $imageL = 0; / 验证码图片长 public static $length = 4; / 验证码位数 public static $bg = array(243, 251, 254); / 背景 protected static $_image = null; / 验证码图片实例 protected static $_color = null; / 验证码字体颜色 /* * 输出验证码并把验证码的值保存的session中 * 验证码保存到sessio

4、n的格式为: $_SESSIONself:$seKey = array(code = 验证码值, time = 验证码创建时间); */ public static function entry() / 图片宽(px) self:$imageL | self:$imageL = self:$length * self:$fontSize * 1.5 + self:$fontSize*1.5; / 图片高(px) self:$imageH | self:$imageH = self:$fontSize * 2; / 建立一幅 self:$imageL x self:$imageH 的图像 sel

5、f:$_image = imagecreate(self:$imageL, self:$imageH); / 设置背景 imagecolorallocate(self:$_image, self:$bg0, self:$bg1, self:$bg2); / 验证码字体随机颜色 self:$_color = imagecolorallocate(self:$_image, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120); / 验证码用法随机字体 /$ttf = dirname(_FILE_) . /ttfs/ . mt_rand(1, 20) . .

6、ttf; 4 $ttf = dirname(_FILE_) . /ttfs/4.ttf; if (self:$useNoise) / 绘杂点 self:_writeNoise(); if (self:$useCurve) / 绘干扰线 self:_writeCurve(); / 绘验证码 $code = array(); / 验证码 $codeNX = 0; / 验证码第N个字符的左边距 for ($i = 0; $iself:$length; $i+) $code$i = self:$codeSetmt_rand(0, 27); $codeNX += mt_rand(self:$fontSi

7、ze*1.2, self:$fontSize*1.6); / 写一个验证码字符 imagettftext(self:$_image, self:$fontSize, mt_rand(-40, 70), $codeNX, self:$fontSize*1.5, self:$_color, $ttf, $code$i); / 保存验证码 isset($_SESSION) | session_start(); $_SESSIONself:$seKeycode = join(, $code); / 把校验码保存到session $_SESSIONself:$seKeytime = time(); /

8、验证码创建时间 header(Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate); header(Cache-Control: post-check=0, pre-check=0, false); header(Pragma: no-cache); header(content-type: image/png); / 输出图像 imagepng(self:$_image); imagedestroy(self:$_image); /* * 画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更

9、帅的曲线函数) * * 高中的数学公式咋都忘了涅,写出来 * 正弦型函数解析式:y=Asin(x+)+b * 各常数值对函数图像的影响: * A:决定峰值(即纵向拉伸压缩的倍数) * b:表示波形在Y轴的位置关系或纵向移动距离(上加下减) * :决定波形与X轴位置关系或横向移动距离(左加右减) * :决定周期(最小正周期T=2/) * */ protected static function _writeCurve() $A = mt_rand(1, self:$imageH/2); / 振幅 $b = mt_rand(-self:$imageH/4, self:$imageH/4); / Y

10、轴方向偏移量 $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; $px1 = 0; / 曲线横坐标起始位置 $px2 = mt_rand(self:$imageL/2, self:$imageL * 0.667); / 曲线横坐标结束位置 for ($px=$px1; $px=$px2; $px=$px+ 0.9) if ($w!=0) $py = $A * sin($w*$px + $f

11、)+ $b + self:$imageH/2; / y = Asin(x+) + b $i = (int) (self:$fontSize - 6)/4); while ($i 0) imagesetpixel(self:$_image, $px + $i, $py + $i, self:$_color); / 这里画像素点比imagettftext和imagestring性能要好许多 $i-; $A = mt_rand(1, self:$imageH/2); / 振幅 $f = mt_rand(-self:$imageH/4, self:$imageH/4); / X轴方向偏移量 $T =

12、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) if ($w!=0) $py = $A * sin($w*$px + $f)+ $b + self:$imageH/2; / y = Asin(x+) + b $i = (int) (self:$fontSize -

13、8)/4); while ($i 0) imagesetpixel(self:$_image, $px + $i, $py + $i, self:$_color); / 这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出(不用这while循环)性能要好许多 $i-; /* * 画杂点 * 往图片上写不同颜色的字母或数字 */ protected static function _writeNoise() for($i = 0; $i 10; $i+) /杂点颜色 $noiseColor = imagecolorallocate( self:$_i

14、mage, mt_rand(150,225), mt_rand(150,225), mt_rand(150,225) ); for($j = 0; $j 5; $j+) / 绘杂点 imagestring( self:$_image, 5, mt_rand(-10, self:$imageL), mt_rand(-10, self:$imageH), self:$codeSetmt_rand(0, 27), / 杂点文本为随机的字母或数字 $noiseColor ); /* * 验证验证码是否正确 * * param string $code 用户验证码 * param bool 用户验证码是

15、否正确 */ public static function check($code) isset($_SESSION) | session_start(); / 验证码不能为空 if(empty($code) | empty($_SESSIONself:$seKey) /echo $_SESSIONself:$seKeycode.1; return false; / session 过期 if(time() - $_SESSIONself:$seKeytime self:$expire) unset($_SESSIONself:$seKey); /echo $_SESSIONself:$seK

16、eycode.2; return false; /return 0; / if($code = $_SESSIONself:$seKeycode) if(strtoupper($code) = $_SESSIONself:$seKeycode) /不区分大小写比较 /echo $_SESSIONself:$seKeycode.3; return true; /echo $_SESSIONself:$seKeycode.4; return false; / useage /* YL_Security_Secoder:$useNoise = false; / 要更平安的话改成true YL_Sec

17、urity_Secoder:$useCurve = true; YL_Security_Secoder:entry(); */ /* / 验证验证码 if (!YL_Security_Secoder:check($_POSTsecode) print error secode; */ 三、调用方法 1.显示验证码页面code.php ?php session_start(); require secoder.class.php; /先把类包含进来,实际路径依据实际状况进行修改。 $vcode = new YL_Security_Secoder(); /实例化一个对象 $vcode-entry(

18、); ? 2.检查验证码是否正确 ?php session_start(); require secoder.class.php; /先把类包含进来,实际路径依据实际状况进行修改。 $vcode = new YL_Security_Secoder(); /实例化一个对象 /$vcode-entry(); $code = $_GETcode; echo $vcode-check($code); /$_SESSIONcode = $vc-getCode();/验证码保存到SESSION中 ? 3.验证码输入框调用页面 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.random(); / 以上就是本文的全部内容,盼望对大家的学习有所关心 .

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1