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 生成随机验证码图片代码
Feb 08 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
Dec 10 PHP
memcache命令启动参数中文解释
Jan 13 PHP
PHP实现的构造sql语句类实例
Feb 03 PHP
非常有用的9个PHP代码片段
Apr 06 PHP
PHP模板引擎Smarty内建函数详解
Apr 11 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
PHP图形计数器程序显示网站用户浏览量
Jul 20 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
Feb 07 PHP
php写app用的框架整理
Sep 29 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编程中数组的指针的使用
2015/11/30 PHP
php cookie工作原理与实例详解
2016/07/18 PHP
php文件包含的几种方式总结
2019/09/19 PHP
让广告代码不再影响你的网页加载速度
2006/07/07 Javascript
js cookies实现简单统计访问次数
2009/11/24 Javascript
jQuery 开天辟地入门篇一
2009/12/09 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
JavaScript实现的内存数据库LokiJS介绍和入门实例
2014/11/17 Javascript
nodejs教程之环境安装及运行
2014/11/21 NodeJs
javascript的switch用法注意事项分析
2015/02/02 Javascript
JavaScript中的分号插入机制详细介绍
2015/02/11 Javascript
jQuery实现表格行上下移动和置顶效果
2015/06/05 Javascript
JavaScript焦点事件、鼠标事件和滚轮事件使用详解
2016/01/15 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
jQuery中layer分页器的使用
2017/03/13 Javascript
bootstrap3-dialog-master模态框使用详解
2017/08/22 Javascript
关于vue单文件中引用路径的处理方法
2018/01/08 Javascript
微信小程序中使用echarts的实现方法
2019/04/24 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
bootstrap-treeview实现多级树形菜单 后台JSON格式如何组织?
2019/07/26 Javascript
Vue 动态路由的实现及 Springsecurity 按钮级别的权限控制
2019/09/05 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
python中退出多层循环的方法
2018/11/27 Python
Python3 Tkinkter + SQLite实现登录和注册界面
2019/11/19 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
python神经网络编程实现手写数字识别
2020/05/27 Python
使用Keras训练好的.h5模型来测试一个实例
2020/07/06 Python
现代家居用品及礼品:LBC Modern
2018/06/24 全球购物
中科软笔试题和面试题
2014/10/07 面试题
弘扬职业精神演讲稿
2014/03/20 职场文书
广播稿:校园广播稿范文
2019/04/17 职场文书
JavaScript 与 TypeScript之间的联系
2021/11/27 Javascript
Redis sentinel哨兵集群的实现步骤
2022/07/15 Redis