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中通过ADO调用Access数据库的方法测试不通过
Dec 31 PHP
PHP 中关于ord($str)&amp;gt;0x80的详细说明
Sep 23 PHP
PHP数据集构建JSON格式及新数组的方法
Nov 07 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
PHP和JavaScrip分别获取关联数组的键值示例代码
Sep 16 PHP
php版淘宝网查询商品接口代码示例
Jun 17 PHP
PHP针对JSON操作实例分析
Jan 12 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
PHP PDOStatement::closeCursor讲解
Jan 30 PHP
PHP XML Expat解析器知识点总结
Feb 15 PHP
php函数式编程简单示例
Aug 08 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
《PHP边学边教》(02.Apache+PHP环境配置――下篇)
2006/12/13 PHP
PHP使用imagick扩展实现合并图像的方法
2017/04/25 PHP
PHP实现数组根据某个字段进行水平合并,横向合并案例分析
2019/10/08 PHP
Nigma vs Alliance BO5 第三场2.14
2021/03/10 DOTA
js下写一个事件队列操作函数
2010/07/19 Javascript
Js获取事件对象代码
2010/08/05 Javascript
jquery1.9 下检测浏览器类型和版本的方法
2013/12/26 Javascript
jQuery中mouseover事件用法实例
2014/12/26 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
jQuery EasyUI Pagination实现分页的常用方法
2016/05/21 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
js Element Traversal规范中的元素遍历方法
2018/04/19 Javascript
JS canvas绘制五子棋的棋盘
2020/05/28 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
JS表格的动态操作完整示例
2020/01/13 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
JavaScript实现Tab标签页切换的最简便方式(4种)
2020/06/28 Javascript
python写xml文件的操作实例
2014/10/05 Python
python实现二维码扫码自动登录淘宝
2016/12/27 Python
python用opencv批量截取图像指定区域的方法
2019/01/24 Python
python求质数列表的例子
2019/11/24 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
2020/06/08 Python
Django如何批量创建Model
2020/09/01 Python
linux面试题参考答案(8)
2016/04/19 面试题
自荐书范文范例
2014/02/13 职场文书
《我的第一本书》教学反思
2014/02/15 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
小学生2014国庆节演讲稿:祖国在我心中
2014/09/21 职场文书
2014年社区综治工作总结
2014/11/17 职场文书
企业党建工作总结2015
2015/05/26 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android