php ci框架验证码实例分析


Posted in PHP onJune 26, 2013

php代码:

<?php 
class Captcha_code
{
 var $width='60';
 var $num='4';
 var $height='20';
 var $name='randcode';
 public function __construct($conf="")
 {
  if($conf!="")
  {
   foreach($conf as $key=>$value)
   {
    $this->$key=$value;
   }
  }
 } function show()
 {
  Header("Content-type: image/gif");
  /*
  * 初始化
  */
  $border = 0; //是否要边框 1要:0不要
  $how = $this->num; //验证码位数
  $w = $this->width; //图片宽度
  $h = $this->height; //图片高度
  $fontsize = 5; //字体大小
  $alpha = "abcdefghijkmnopqrstuvwxyz"; //验证码内容1:字母
  $number = "023456789"; //验证码内容2:数字
  $randcode = ""; //验证码字符串初始化
  srand((double)microtime()*1000000); //初始化随机数种子
  $im = ImageCreate($w, $h); //创建验证图片
  /*
  * 绘制基本框架
  */
  $bgcolor = ImageColorAllocate($im, 255, 255, 255); //设置背景颜色
  ImageFill($im, 0, 0, $bgcolor); //填充背景色
  if($border)
  {
   $black = ImageColorAllocate($im, 0, 0, 0); //设置边框颜色
   ImageRectangle($im, 0, 0, $w-1, $h-1, $black);//绘制边框
  }
  /*
  * 逐位产生随机字符
  */
  for($i=0; $i<$how; $i++)
  {   
   $alpha_or_number = mt_rand(0, 1); //字母还是数字
   $str = $alpha_or_number ? $alpha : $number;
   $which = mt_rand(0, strlen($str)-1); //取哪个字符
   $code = substr($str, $which, 1); //取字符
   $j = !$i ? 4 : $j+15; //绘字符位置
   $color3 = ImageColorAllocate($im, mt_rand(0,100), mt_rand(0,100), mt_rand(0,100)); //字符随即颜色
   ImageChar($im, $fontsize, $j, 3, $code, $color3); //绘字符
   $randcode .= $code; //逐位加入验证码字符串
  }
  /*
  * 添加干扰
  */
  for($i=0; $i<5; $i++)//绘背景干扰线
  {   
   $color1 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰线颜色
   ImageArc($im, mt_rand(-5,$w), mt_rand(-5,$h), mt_rand(20,300), mt_rand(20,200), 55, 44, $color1); //干扰线
  }   
  for($i=0; $i<$how*15; $i++)//绘背景干扰点
  {   
   $color2 = ImageColorAllocate($im, mt_rand(0,255), mt_rand(0,255), mt_rand(0,255)); //干扰点颜色 
   ImageSetPixel($im, mt_rand(0,$w), mt_rand(0,$h), $color2); //干扰点
  }
  //把验证码字符串写入session
  //$this->session->set_userdata(array($this->name=>$randcode));
  $_SESSION[$this->name]=$randcode;
  /*绘图结束*/
  Imagegif($im);
  ImageDestroy($im);
  /*绘图结束*/
 }
}
?>

调用php代码:
    function verify_image() {
        $conf['name'] = 'verify_code'; //作为配置参数
        $this->load->library('lib_captcha', $conf);
        $this->lib_captcha->show();
        $yzm_session = $this->session->userdata('verify_code');
        echo $yzm_session;
    }

html代码:
<dl>
          <dt>验证码:</dt>
          <dd>
            <input type="text" name="verify_text" id="verify_text" class="yzma" value="">
            <img src="/user/verify_image" alt="验证码" id="verify_code" class="yz_img" />
            <a href="javascript:changeCode();" class="change_yz">换一张</a>
          </dd>
          <dd class="tips_wrong"><b>验证码不正确</b></dd>
          <dd class="tips_correct"></dd>
        </dl>

js代码:
<script type="text/javascript">
    function changeCode(){
         FS.query("#verify_code").src ="/user/verify_image?r=" + Math.random();
    }
</script>

PHP 相关文章推荐
PHP静态类
Nov 25 PHP
C# Assembly类访问程序集信息
Jun 13 PHP
解析php利用正则表达式解决采集内容排版的问题
Jun 20 PHP
解析PHP无限级分类方法及代码
Jun 21 PHP
ThinkPHP提交表单时默认自动转义的解决方法
Nov 25 PHP
PHP Warning: Module 'modulename' already loaded in问题解决办法
Mar 16 PHP
php获取网页上所有链接的方法
Apr 03 PHP
PHP面向对象程序设计(OOP)之方法重写(override)操作示例
Dec 21 PHP
PHP 7.4中使用预加载的方法详解
Jul 08 PHP
使用laravel指定日志文件记录任意日志
Oct 17 PHP
laravel 解决paginate查询多个字段报错的问题
Oct 22 PHP
实例化php类时传参的方法分析
Jun 05 PHP
解析php file_exists无效的解决办法
Jun 26 #PHP
使用HMAC-SHA1签名方法详解
Jun 26 #PHP
php读取文件内容的几种方法详解
Jun 26 #PHP
深入file_get_contents与curl函数的详解
Jun 25 #PHP
解析如何去掉CodeIgniter URL中的index.php
Jun 25 #PHP
解析php入库和出库
Jun 25 #PHP
解析php下载远程图片函数 可伪造来路
Jun 25 #PHP
You might like
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
php+MySQL判断update语句是否执行成功的方法
2014/08/28 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
利用php生成验证码
2017/02/23 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
javascript js cookie的存储,获取和删除
2007/12/29 Javascript
ajax与302响应代码测试
2013/10/23 Javascript
用js+iframe形成页面的一种遮罩效果的具体实现
2013/12/31 Javascript
JS正则表达式验证数字代码
2014/01/28 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
在Python中使用glob模块查找文件路径的方法
2015/06/17 Javascript
jquery带有索引按钮且自动轮播切换特效代码分享
2015/09/15 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
原生js开发的日历插件
2017/02/04 Javascript
实例详解display:none与visible:hidden的区别
2017/03/30 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
switchery按钮的使用方法
2017/12/18 Javascript
VUE DOM加载后执行自定义事件的方法
2018/09/07 Javascript
[49:56]VG vs Optic 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python发送arp欺骗攻击代码分析
2014/01/16 Python
Python读写Json涉及到中文的处理方法
2016/09/12 Python
Python多线程扫描端口代码示例
2018/02/09 Python
python定位xpath 节点位置的方法
2019/08/27 Python
wxPython多个窗口的基本结构
2019/11/19 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
关于h5中的fetch方法解读(小结)
2017/11/15 HTML / CSS
俄罗斯和世界各地的酒店预订:Hotels.com俄罗斯
2016/08/19 全球购物
工商管理专业实习大学生自我鉴定
2013/09/19 职场文书
秦兵马俑教学反思
2014/02/07 职场文书
期末个人总结范文
2015/02/13 职场文书
2015年党支部书记工作总结
2015/05/21 职场文书
学生会2016感恩节活动小结
2016/04/01 职场文书
python神经网络编程之手写数字识别
2021/05/08 Python
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫