千家信息网

如何搭建一个简单安全的PHP验证码类和PHP验证码

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章给大家介绍如何搭建一个简单安全的PHP验证码类和PHP验证码,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。一,验证码示例二,php验证码类,secoder.class.p
千家信息网最后更新 2026年10月31日如何搭建一个简单安全的PHP验证码类和PHP验证码

这篇文章给大家介绍如何搭建一个简单安全的PHP验证码类和PHP验证码,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

一,验证码示例

二,php验证码类,secoder.class.php

 * @link http://labs.yulans.cn/YL_Security_Secoder * @link http://wiki.yulans.cn/docs/yl/security/secoder */ class YL_Security_Secoder { /** * 验证码的session的下标 * * @var string */ //public static $seKey = 'sid.sek ey.ylans.cn'; 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 = 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中 * 验证码保存到session的格式为: $_SESSION[self::$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 的图像 self::$_image = imagecreate(self::$imageL, self::$imageH); // 设置背景 imagecolorallocate(self::$_image, self::$bg[0], self::$bg[1], self::$bg[2]); // 验证码字体随机颜色 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) . '.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; $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 = 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 - 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::$_image, 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::$codeSet[mt_rand(0, 27)], // 杂点文本为随机的字母或数字 $noiseColor ); } } } /** * 验证验证码是否正确 * * @param string $code 用户验证码 * @param bool 用户验证码是否正确 */ public static function check($code) { isset($_SESSION) || session_start(); // 验证码不能为空 if(empty($code) || empty($_SESSION[self::$seKey])) { //echo $_SESSION[self::$seKey]['code'].'1'; return false; } // session 过期 if(time() - $_SESSION[self::$seKey]['time'] > self::$expire) { unset($_SESSION[self::$seKey]); //echo $_SESSION[self::$seKey]['code'].'2'; return false; //return 0; } // if($code == $_SESSION[self::$seKey]['code']) { if(strtoupper($code) == $_SESSION[self::$seKey]['code']) { //不区分大小写比较 //echo $_SESSION[self::$seKey]['code'].'3'; return true; } //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'])) { print 'error secode'; } */

三,调用方法

1,显示验证码页面code.php

entry(); ?>

2,检查验证码是否正确

entry(); $code = $_GET['code']; echo $vcode->check($code); //$_SESSION['code'] = $vc->getCode();//验证码保存到SESSION中 ?>

3,验证码输入框调用页面

 单击图片重新获取验证码

关于如何搭建一个简单安全的PHP验证码类和PHP验证码就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

验证 图片 字体 安全 曲线 位置 函数 周期 颜色 图像 大小 方向 时间 偏移 干扰 不同 不用 像素 内容 字符 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 哈尔滨大商圈互联网科技有限公司 中关村互联网 科技集团 互联网科技公司华为 西安互联网科技 天津摩尔互联网科技 亿账通互联网科技 万达互联网科技 济南和联互联网科技有限公司 宁波青枫互联网科技有限公司 互联网科技热点资讯 互联网为啥属于高科技 杭州壁岐互联网科技有限公司 互联网科技与大数据专业 互联网公司黑科技创始人 广州新华互联网科技学校电竞方面 互联网金融科技名词解释 领航科技大厦互联网公司 互联网高科技行业有哪些企业 互联网企业和网络科技有限公司 株洲百竞科技的互联网营销顾问 广州万易互联网科技有限公司 科技类互联网 深圳期待互联网科技 中国互联网金融科技基金 深圳市运趣互联网科技有限公司 昊天互联网科技有限公司 浙南科技城互联网大厦建设工程 用友工业互联网科技发展 中和天地互联网科技有限公司 重庆科技产业互联网有哪些
0