这里有新鲜出炉的 PHP 教程,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
这篇文章主要介绍了 php 封装的验证码工具类, 结合完整实例形式分析了 php 针对验证码图形操作的相关技巧, 需要的朋友可以参考下
本文实例讲述了 php 封装的验证码工具类。分享给大家供大家参考,具体如下:
- <?php
- //验证码工具类
- class Captcha{
- //属性
- private $width;
- private $height;
- private $fontsize;
- private $pixes;
- private $lines;
- private $str_len;
- /*
- * 构造方法
- * @param1 array $arr = array(),初始化属性的关联数组
- */
- public function __construct($arr = array()){
- //初始化
- $this->width = isset($arr['width']) ? $arr['width'] : $GLOBALS['config']['captcha']['width'];
- $this->height = isset($arr['height']) ? $arr['height'] : $GLOBALS['config']['captcha']['height'];
- $this->fontsize = isset($arr['fontsize']) ? $arr['fontsize'] : $GLOBALS['config']['captcha']['fontsize'];
- $this->pixes = isset($arr['pixes']) ? $arr['pixes'] : $GLOBALS['config']['captcha']['pixes'];
- $this->lines = isset($arr['lines']) ? $arr['lines'] : $GLOBALS['config']['captcha']['lines'];
- $this->str_len = isset($arr['str_len']) ? $arr['str_len'] : $GLOBALS['config']['captcha']['str_len'];
- }
- /*
- * 产生验证码图片
- */
- public function generate(){
- //制作画布
- $img = imagecreatetruecolor($this->width,$this->height);
- //给定背景色
- $bg_color = imagecolorallocate($img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
- imagefill($img,0,0,$bg_color);
- //制作干扰线
- $this->getLines($img);
- //增加干扰点
- $this->getPixels($img);
- //增加验证码文字
- $captcha = $this->getCaptcha();
- //文字颜色
- $str_color = imagecolorallocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
- //写入文字
- //计算文字应该出现的起始位置
- $start_x = ceil($this->width/2) - 25;
- $start_y = ceil($this->height/2) - 8;
- if(imagestring($img,$this->fontsize,$start_x,$start_y,$captcha,$str_color)){
- //成功:输出验证码
- header('Content-type:image/png');
- imagepng($img);
- }else{
- //失败
- return false;
- }
- }
- /*
- * 获取验证码随机字符串
- * @return string $captcha,随机验证码文字
- */
- private function getCaptcha(){
- //获取随机字符串
- $str = implode('',array_merge(range('a','z'),range('A','Z'),range(1,9)));
- //随机取
- $captcha = ''; //保存随机字符串
- for($i = 0,$len = strlen($str);$i < $this->str_len;$i++){
- //每次随机取一个字符
- $captcha .= $str[mt_rand(0,$len - 1)] . ' ';
- }
- //将数据保存到session
- $_SESSION['captcha'] = str_replace(' ','',$captcha);
- //返回值
- return $captcha;
- }
- /*
- * 增加干扰点
- * @param1 resource $img
- */
- private function getPixels($img){
- //增加干扰点
- for($i = 0;$i < $this->pixes;$i++){
- //分配颜色
- $pixel_color = imagecolorallocate($img,mt_rand(100,150),mt_rand(100,150),mt_rand(100,150));
- //画点
- imagesetpixel($img,mt_rand(0,$this->width),mt_rand(0,$this->height),$pixel_color);
- }
- }
- /*
- * 增加干扰线
- * @param1 resource $img,要增加干扰线的图片资源
- */
- private function getLines($img){
- //增加干扰线
- for($i = 0;$i < $this->lines;$i++){
- //分配颜色
- $line_color = imagecolorallocate($img,mt_rand(150,200),mt_rand(150,200),mt_rand(150,200));
- //画线
- imageline($img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$line_color);
- }
- }
- /*
- * 验证验证码
- * @param1 string $captcha,用户提交的验证码
- * @return bool,成功返回true,失败返回false
- */
- public static function checkCaptcha($captcha){
- //验证码不区分大小写
- return (strtolower($captcha) === strtolower($_SESSION['captcha']));
- }
- }
希望本文所述对大家 PHP 程序设计有所帮助。
来源: http://www.phperz.com/article/17/0803/341821.html