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 相关文章推荐
模拟xcopy的函数
Oct 09 PHP
php中ob(Output Buffer 输出缓冲)函数使用方法
Jul 21 PHP
php 动态多文件上传
Jan 18 PHP
php懒人函数 自动添加数据
Jun 28 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
PHP文件上传判断file是否己选择上传文件的方法
Nov 10 PHP
php实现插入数组但不影响原有顺序的方法
Mar 27 PHP
php实现概率性随机抽奖代码
Jan 02 PHP
PHP中addcslashes与stripcslashes函数用法分析
Jan 07 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
laravel添加角色和模糊搜索功能的实现代码
Jun 22 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获取客户端真实IP地址的5种情况分析和实现代码
2014/07/08 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
2017/03/13 PHP
深入理解Yii2.0乐观锁与悲观锁的原理与使用
2017/07/26 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
当jQuery1.7遇上focus方法的问题
2014/01/26 Javascript
Javascript window对象详解
2014/11/12 Javascript
Bootstrap三种表单布局的使用方法
2016/06/21 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
node+express制作爬虫教程
2016/11/11 Javascript
js CSS3实现卡牌旋转切换效果
2017/07/04 Javascript
vscode下vue项目中eslint的使用方法
2019/01/13 Javascript
vue项目中引入Sass实例方法
2019/08/27 Javascript
Vue.js实现可编辑的表格
2019/12/11 Javascript
Vue export import 导入导出的多种方式与区别介绍
2020/02/12 Javascript
vue实现日历表格(element-ui)
2020/09/24 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
python自定义类并使用的方法
2015/05/07 Python
Python中线程编程之threading模块的使用详解
2015/06/23 Python
使用Python脚本实现批量网站存活检测遇到问题及解决方法
2016/10/11 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python中的延迟绑定原理详解
2019/10/11 Python
Django3中的自定义用户模型实例详解
2020/08/23 Python
泰国第一在线超市:Tops
2021/02/13 全球购物
继电保护工岗位职责
2014/01/05 职场文书
安全月活动总结
2014/05/05 职场文书
小学生校园广播稿
2014/09/28 职场文书
见习报告的格式
2014/10/31 职场文书
2014年辅导员工作总结
2014/11/18 职场文书
毕业生个人自荐书
2015/03/05 职场文书
结婚幸福感言
2015/08/01 职场文书
《童年》读后感(三篇)
2019/08/27 职场文书
《中华上下五千年》读后感3篇
2019/11/29 职场文书
读《茶花女》有感:山茶花的盛开与凋零
2020/01/17 职场文书