php生成图片验证码
来源:互联网 发布:域名投资 编辑:程序博客网 时间:2024/06/05 05:02
<?php/* * 图片验证码类 * 生成图片类型验证码,验证码包含数字和大写字母,session中存放md5加密后的验证码 * * 使用方法: * $captcha = new Catpcha(); * $captcha->buildAndExportImage();
* */class Lib_Captcha { private $width;//宽度 private $height; //高度 private $codeNum;//验证码字符数量 private $image;//验证码图像资源 private $sessionKey;//session中保存的名字 private $captcha;//验证码字符串 const charWidth = 10;//单个字符宽度,根据输出字符大小而变 /** * 创建验证码类,初始化相关参数 * @param $width 图片宽度 * @param $height 图片高度 * @param $codeNum 验证码字符数量 * @param $sessionKey session中保存的名字 */ function __construct($width = 50, $height = 30, $codeNum = 4, $sessionKey = 'captcha') { $this->width = $width; $this->height = $height; $this->codeNum = $codeNum; $this->sessionKey = $sessionKey; //保证最小高度和宽度 if($height < 20) { $this->height = 20; } if($width < ($codeNum * self::charWidth + 10)) {//左右各保留5像素空隙 $this->width = $codeNum * self::charWidth + 10; } } /** * 构造并输出验证码图片 */ public function buildAndExportImage() { $this->createImage(); $this->setDisturb(); $this->setCaptcha(); $this->exportImage(); } /** * 构造图像,设置底色 */ private function createImage() { //创建图像 $this->image = imagecreatetruecolor($this->width, $this->height); //创建背景色 $bg = imagecolorallocate($this->image, mt_rand(220, 255), mt_rand(220, 255), mt_rand(220, 255)); //填充背景色 imagefilledrectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $bg); } /** * 设置干扰元素 */ private function setDisturb() { //设置干扰点 for($i = 0; $i < 150; $i++) { $color = imagecolorallocate($this->image, mt_rand(150, 200), mt_rand(150, 200), mt_rand(150, 200)); imagesetpixel($this->image, mt_rand(5, $this->width - 10), mt_rand(5, $this->height - 3), $color); } //设置干扰线 for($i = 0; $i < 10; $i++) { $color = imagecolorallocate($this->image, mt_rand(150, 220), mt_rand(150, 220), mt_rand(150, 220)); imagearc($this->image, mt_rand(-10, $this->width), mt_rand(-10, $this->height), mt_rand(30, 300), mt_rand(20, 200), 55, 44, $color); } //创建边框色 $border = imagecolorallocate($this->image, mt_rand(0, 50), mt_rand(0, 50), mt_rand(0, 50)); //画边框 imagerectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $border); } /** * 产生并绘制验证码 */ private function setCaptcha() { //复杂验证码 $code = ''; $box = 'qwrtyuiopasdfghjklzx012345789cvbnmQAZWSXEDCRFVTGBYHNUJMKIOLP0123456789'; for($i=0;$i<$this->codeNum;$i++) $code .= $box[rand(0,69)]; $this->captcha = $code; /* $str = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ'; //生成验证码字符 for($i = 0; $i < $this->codeNum; $i++) { $this->captcha .= $str{mt_rand(0, strlen($str) - 1)}; }*/ //session_start(); //$_SESSION['captcha'] = $this->captcha; //链接REDIS $Redis = Lib_Redis::getInstance(); if($Redis->redis == false) return; //获取redis前缀键值 $prefix = Yaf_Registry::get('Config')->REDIS_DB_PREFIX; $Redis->redis->set($prefix.session_id(),$this->captcha,300); //绘制验证码 for($i = 0; $i < strlen($this->captcha); $i++) { $color = imagecolorallocate($this->image, mt_rand(0, 200), mt_rand(0, 200), mt_rand(0, 200)); $x = floor(($this->width - 10)/$this->codeNum); $x = $x*$i + floor(($x-self::charWidth)/2) + 5; $y = mt_rand(2, $this->height - 20); imagechar($this->image, 5, $x, $y, $this->captcha{$i}, $color); } } public function getCaptcha() { return $this->captcha; } /* * 输出图像,验证码保存到session中 */ private function exportImage() { //将验证码信息保存到session中,md5加密 if(!isset($_SESSION)){ session_start(); } //$_SESSION['captcha']=$this->getCaptcha(); if(imagetypes() & IMG_GIF){ header('Content-type:image/gif'); imagegif($this->image); } else if(imagetypes() & IMG_PNG){ header('Content-type:image/png'); imagepng($this->image); } else if(imagetypes() & IMG_JPEG) { header('Content-type:image/jpeg'); imagepng($this->image); } else { imagedestroy($this->image); die("Don't support image type!"); } imagedestroy($this->image); } function __destruct() { unset($this->width, $this->height, $this->codeNum,$this->captcha); }}
0 0
- php生成图片验证码
- php生成图片验证码
- php生成验证码图片
- PHP生成图片验证码
- php生成图片验证码
- php生成图片验证码
- php生成图片验证码
- php生成图片验证码
- php验证码图片生成
- PHP生成验证码图片
- php程序如何生成验证码图片
- php生成验证码图片代码
- PHP验证码程序:session生成图片
- php程序如何生成验证码图片
- php生成验证码图片代码
- PHP生成GIF动态图片验证码
- PHP生成GIF动态图片验证码
- PHP 生成随机的验证码图片
- 8大策略让你对抗机器学习数据集里的不均衡数据
- C语言二维数组与指针
- JS中的DOM方法大全
- 一个小程序:Instrumentation的使用
- 红外与可见光图像配准算法--MATLAB版
- php生成图片验证码
- PHP无限分类-左右值实现
- python json
- redhat6.4下添加一个用户并赋管理员权限
- appium环境搭建步骤记录(二)-appium环境配置及sdkmanager
- Linux下找不到so文件的解决办法
- 判断两个链表是否相交并找出交点
- html设置Qwebview滚动条的样式风格
- Oracle_create an index using unusable