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 26 PHP
centos 5.6 升级php到5.3的方法
May 14 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
php使用curl检测网页是否被百度收录的示例分享
Jan 31 PHP
CodeIgniter框架URL路由总结
Sep 03 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
php生成二维码图片方法汇总
Dec 17 PHP
php中类和对象:静态属性、静态方法
Apr 09 PHP
PHP实现使用DOM将XML数据存入数组的方法示例
Sep 27 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
PHP 实现 JSON 数据的编码和解码操作详解
Apr 22 PHP
php双向队列实例讲解
Nov 17 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/04/17 PHP
ThinkPHP3.1的Widget新用法
2014/06/19 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
PHP基本语法实例总结
2016/09/09 PHP
才发现的超链接js导致网页中GIF动画停止的解决方法
2007/11/02 Javascript
用JavaScript实现UrlEncode和UrlDecode的脚本代码
2008/07/23 Javascript
jquery 单击li防止重复加载的实现代码
2010/12/24 Javascript
改变隐藏的input中value的值代码
2013/12/30 Javascript
简单选项卡 js和jquery制作方法分享
2014/02/26 Javascript
JQuery中使用Ajax赋值给全局变量失败异常的解决方法
2014/08/18 Javascript
详谈DOM简介及节点、属性、查找节点的方法
2017/11/16 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
2019/05/18 Javascript
express框架中使用jwt实现验证的方法
2019/08/25 Javascript
微信小程序获取位置展示地图并标注信息的实例代码
2019/09/01 Javascript
vue props default Array或是Object的正确写法说明
2020/07/30 Javascript
Python使用Tkinter实现机器人走迷宫
2018/01/22 Python
Python使用flask框架操作sqlite3的两种方式
2018/01/31 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
Python使用selenium实现网页用户名 密码 验证码自动登录功能
2018/05/16 Python
在python中实现对list求和及求积
2018/11/14 Python
Python实现定时执行任务的三种方式简单示例
2019/03/30 Python
分享8个非常流行的 Python 可视化工具包
2019/06/05 Python
python中for循环把字符串或者字典添加到列表的方法
2019/07/20 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
使用浏览器访问python写的服务器程序
2019/10/10 Python
python中return如何写
2020/06/18 Python
美国网上订购鲜花:FTD
2016/09/23 全球购物
幼儿教师工作感言
2014/02/14 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
2014红色之旅心得体会
2014/10/07 职场文书
2014年护士长工作总结
2014/11/11 职场文书
证婚人致辞精选
2015/07/28 职场文书
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js