一个PHP验证码类与实例
2013-12-27 07:11
477 查看
这是个php 验证码类,我现在设置的大小是90*30的,可以根据需要具体修改,不过,修改了图片大小以后,需要根据情况具体修改些。
1,代码调用:
1,代码调用:
// 绘验证码 $code = array(); // 验证码 $codeNX =-20; // 验证码第N个字符的左边距,如果图片大小变化,需要修改 for ($i = 0; $i<self::$length; $i++) { $code[$i] = self::$codeSet[mt_rand(0, 27)]; $codeNX += mt_rand(self::$fontSize, self::$fontSize); // 写一个验证码字符,具体修改看这个函数的功能 imagettftext(self::$_image, self::$fontSize*0.65, mt_rand(-40, 40), $codeNX, self::$fontSize, self::Getcolor(), $ttf, $code[$i]); //imagettftext()中self::$fontSize大小修改,改变字母上下的幅度,具体可以这样self::$fontSize*0.9, } <?php /** * 安全验证码 * 整理:www.jbxue.com * 安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码 * */ class Authcode { /** * 验证码的session的下标 * * @var string */ public static $seKey = 'authcode'; public static $expire = 3000; // 验证码过期时间(s) /** * 验证码中使用的字符,01IO容易混淆,建议不用 * * @var string */ public static $codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY'; public static $fontSize = 20; // 验证码字体大小(px) public static $useCurve = true; // 是否画混淆曲线 public static $useNoise = true; // 是否添加杂点 public static $imageH = 25; // 验证码图片宽 public static $imageW = 75; // 验证码图片长 public static $length = 4; // 验证码位数 public static $font = 1; //选择字体 protected static $_image = null; // 验证码图片实例 protected static $_color = null; // 验证码字体颜色 /** * 验证码字体颜色,可以设定为固定,也可以随机,可以所有为一个颜色也可以每个字符为一个颜色 * */ public static function Getcolor(){ $fontcolor = imagecolorallocate(self::$_image, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120)); return $fontcolor; } /* * 可以根据自己需要来添加或者减少,也可以指定单一的背景颜色 */ public static function Background(){ $color = array( array(240,255,255), array(245,245,245), array(255,248,220), array(252,230,201), array(240,255,240), array(250,255,240), array(250,240,230), array(255,245,238), array(255,250,250) ); $m = rand(0,5); imagecolorallocate(self::$_image, $color[$m][0], $color[$m][1], $color[$m][2]); } /** * 输出验证码并把验证码的值保存的session中 * 验证码保存到session的格式为: $_SESSION[self::$seKey] = array('code' => '验证码值', 'time' => '验证码创建时间'); */ public static function Build() { // 图片宽(px) self::$imageW || self::$imageW = self::$length * self::$fontSize + self::$fontSize; // 图片高(px) self::$imageH || self::$imageH = self::$fontSize * 3; // 建立一幅 self::$imageW x self::$imageH 的图像 self::$_image = imagecreate(self::$imageW, self::$imageH); // 设置背景 self::Background(); // 验证码使用字体 $ttf = 'style/images/' . self::$font . '.ttf'; if (self::$useNoise) { // 绘杂点 self::writeNoise(); } // 绘验证码 $code = array(); // 验证码 $codeNX =-20; // 验证码第N个字符的左边距 for ($i = 0; $i<self::$length; $i++) { $code[$i] = self::$codeSet[mt_rand(0, 27)]; $codeNX += mt_rand(self::$fontSize, self::$fontSize); // 写一个验证码字符,具体修改看这个函数的功能 imagettftext(self::$_image, self::$fontSize*0.6, mt_rand(-40, 40), $codeNX, self::$fontSize*0.9, self::Getcolor(), $ttf, $code[$i]); } // 保存验证码 // isset($_SESSION) || session_start(); $_SESSION[self::$seKey] = join('', $code); // 把校验码保存到session $_SESSION['out_time'] = time(); // 验证码创建时间 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); } /** * 画杂点 * 往图片上写不同颜色的字母或数字 */ protected static function writeNoise() { for($i = 0; $i < 5; $i++){ //杂点颜色 $noiseColor = imagecolorallocate( self::$_image, mt_rand(100,200), mt_rand(100,200), mt_rand(100,200) ); for($j = 0; $j < 3; $j++) { // 绘杂点($j<? 来调整杂点个数) imagestring( self::$_image, 3, //背景字体的大小 mt_rand(-5, self::$imageW), mt_rand(-5, self::$imageH), self::$codeSet[mt_rand(1, 27)], // 杂点文本为随机的字母或数字 $noiseColor ); } } } /** * 验证验证码是否正确 * * @param string $code 用户验证码 * @param bool 用户验证码是否正确 */ public static function check($code) { $code = strtoupper($code); // 验证码不能为空 if(emptyempty($code) || emptyempty($_SESSION[self::$seKey])) { return false; } // session 过期 if(time() - $_SESSION['out_time'] > self::$expire) { unset($_SESSION[self::$seKey]); return false; } if($code == $_SESSION[self::$seKey]) { return true; } return false; } }
相关文章推荐
- PHP+AJAX无刷新返回天气预报
- 一个好用的PHP验证码类
- 入门级的PHP验证码
- paip.广告过滤系统 php 实现
- paip.广告过滤系统 php 实现
- 一个好用的PHP验证码类实例分享
- 浅谈PHP变量作用域以及地址引用问题
- 类似php的js数组的in_array函数自定义方法
- php date
- 使用PHP做网页采集实例过程总结
- mac下php扩展mcrypt无法安装问题
- php 异步执行
- Intellij Idea/Webstorm/Phpstorm
- Discuz! x3.1的插件/utility/convert/index.php代码执行漏洞
- DedeCMS 5.7 config.php 跨站脚本漏洞
- 开始学习PHP之初识数据库连接
- PHP覆盖率
- 整理收藏一份PHP高级工程师的笔试题(附答案)
- php session 和cookie
- PHP dev note