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输出控制功能在简繁体转换中的应用
Oct 09 PHP
如何在PHP中使用Oracle数据库(4)
Oct 09 PHP
php之XML转数组函数的详解
Jun 07 PHP
Symfony2安装第三方Bundles实例详解
Feb 04 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
thinkPHP实现的联动菜单功能详解
May 05 PHP
利用PHPStorm如何开发Laravel应用详解
Aug 30 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
Sep 16 PHP
laravel利用中间件防止未登录用户直接访问后台的方法
Sep 30 PHP
TP5框架页面跳转样式操作示例
Apr 05 PHP
php命令行模式代码实例详解
Feb 26 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
smarty缓存用法分析
2014/12/16 PHP
PHP中使用imagick实现把PDF转成图片
2015/01/26 PHP
php中session_id()函数详细介绍,会话id生成过程及session id长度
2015/09/23 PHP
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
2013/10/29 Javascript
html5 canvas js(数字时钟)实例代码
2013/12/23 Javascript
Jquery给基本控件的取值、赋值示例
2014/05/23 Javascript
json实现前后台的相互传值详解
2015/01/05 Javascript
js实现的牛顿摆效果
2015/03/31 Javascript
jQuery实现单击弹出Div层窗口效果(可关闭可拖动)
2015/09/19 Javascript
JS组件Bootstrap Select2使用方法解析
2016/05/30 Javascript
微信小程序 详解下拉加载与上拉刷新实现方法
2017/01/13 Javascript
JavaScript实现简单的星星评分效果
2017/05/18 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
vue移动端下拉刷新和上拉加载的实现代码
2018/09/08 Javascript
JavaScript中的事件与异常捕获详析
2019/02/24 Javascript
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
实例说明Python中比较运算符的使用
2015/05/13 Python
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
python2.7无法使用pip的解决方法(安装easy_install)
2018/04/03 Python
Python中的函数式编程:不可变的数据结构
2018/10/08 Python
python图形开发GUI库pyqt5的详细使用方法及各控件的属性与方法
2020/02/14 Python
python定义类的简单用法
2020/07/24 Python
英国汽车座椅和婴儿车购物网站:Uber Kids
2017/04/19 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
进步之星获奖感言
2014/02/22 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
初中教师个人工作总结
2015/02/10 职场文书
《分数乘法》教学反思
2016/02/24 职场文书
导游词之云南丽江古城
2019/09/17 职场文书
Python进度条的使用
2021/05/17 Python
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android