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 数组入门教程小结
May 20 PHP
PHP 超链接 抓取实现代码
Jun 29 PHP
PHP array_push 数组函数
Dec 26 PHP
支持中文字母数字、自定义字体php验证码代码
Feb 27 PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
php实现的mongodb操作类实例
Apr 03 PHP
微信自定义菜单的创建/查询/取消php示例代码
Aug 05 PHP
PHP解决中文乱码
Apr 28 PHP
PHP命令Command模式用法实例分析
Aug 08 PHP
禁止直接访问php文件代码分享
May 05 PHP
PHP7 其他修改
Mar 09 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结合飞信 免费天气预报短信
2009/05/07 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
2010/04/12 PHP
php使用Jpgraph绘制柱形图的方法
2015/06/10 PHP
ThinkPHP中create()方法自动验证实例
2017/04/26 PHP
Laravel框架集合用法实例浅析
2020/05/14 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
js兼容标准的表格变色效果
2008/06/28 Javascript
Javascript 拖拽雏形(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
JQuery中ajax方法访问web服务实例
2015/07/18 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
实用又漂亮的BootstrapValidator表单验证插件
2016/05/30 Javascript
详解微信第三方小程序代开发
2017/06/23 Javascript
详解vue.js+UEditor集成 [前后端分离项目]
2017/07/07 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
基于layui框架响应式布局的一些使用详解
2019/09/16 Javascript
Angular 多模块项目构建过程
2020/02/13 Javascript
微信小程序动态添加和删除组件的现实
2020/02/28 Javascript
Django自定义认证方式用法示例
2017/06/23 Python
[原创]windows下Anaconda的安装与配置正解(Anaconda入门教程)
2018/04/05 Python
Django处理文件上传File Uploads的实例
2018/05/28 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
详解Python3.6的py文件打包生成exe
2018/07/13 Python
python模拟菜刀反弹shell绕过限制【推荐】
2019/06/25 Python
浅谈Tensorflow 动态双向RNN的输出问题
2020/01/20 Python
selenium WebDriverWait类等待机制的实现
2020/03/18 Python
澳大利亚当地社区首选的光学商店:1001 Optical
2019/08/24 全球购物
W Hamond官网:始于1979年的钻石专家
2020/07/20 全球购物
迟到检讨书1000字
2014/01/15 职场文书
竞选班干部演讲稿600字
2014/08/20 职场文书
党员批评与自我批评发言稿
2014/10/14 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
2014年基建工作总结
2014/12/12 职场文书
幼师自荐信范文
2015/03/06 职场文书
2015年教学工作总结
2015/04/02 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server