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初学者头疼问题总结
Jul 08 PHP
php简单封装了一些常用JS操作
Feb 25 PHP
Ajax+PHP边学边练 之五 图片处理
Dec 03 PHP
PHP 实现explort() 功能的详解
Jun 20 PHP
一款简单实用的php操作mysql数据库类
Dec 08 PHP
PHP使用PHPexcel导入导出数据的方法
Nov 14 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
PHP实现的折半查找算法示例
Dec 19 PHP
PHP SPL 被遗落的宝石【SPL应用浅析】
Apr 20 PHP
Yii2框架类自动加载机制实例分析
May 02 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
Oct 23 PHP
PHP的介绍以及优势详细分析
Sep 05 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 或网站服务器日志,并正确配置 PHP 安装最快的解决办法
2010/08/01 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
如何让页面在打开时自动刷新一次让图片全部显示
2012/12/17 Javascript
浅析hasOwnProperty方法的应用
2013/11/20 Javascript
js 阻止子元素响应父元素的onmouseout事件具体实现
2013/12/23 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
js验证上传图片的方法
2015/05/12 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
实例代码讲解jquery easyui动态tab页
2015/11/17 Javascript
浅谈jQuery 选择器和dom操作
2016/06/07 Javascript
vue.js入门教程之绑定class和style样式
2016/09/02 Javascript
javascript简单进制转换实现方法
2016/11/24 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
JS脚本实现网页自动秒杀点击
2018/01/11 Javascript
详解三种方式解决vue中v-html元素中标签样式
2018/11/22 Javascript
JS 图片压缩原理与实现方法详解
2020/04/29 Javascript
5个你不知道的JavaScript字符串处理库(小结)
2020/06/01 Javascript
使用Python设置tmpfs来加速项目的教程
2015/04/17 Python
详解Python中的各种函数的使用
2015/05/24 Python
Python 中urls.py:URL dispatcher(路由配置文件)详解
2017/03/24 Python
浅谈numpy库的常用基本操作方法
2018/01/09 Python
matplotlib subplots 调整子图间矩的实例
2018/05/25 Python
对PyQt5的输入对话框使用(QInputDialog)详解
2019/06/25 Python
Pytorch DataLoader 变长数据处理方式
2020/01/08 Python
python UIAutomator2使用超详细教程
2021/02/19 Python
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
通信工程毕业生求职信
2013/11/16 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
六查六看自检自查剖析材料
2014/10/14 职场文书
单身证明格式样本
2015/06/15 职场文书
运动会广播稿50字
2015/08/19 职场文书
情侣餐厅的创业计划书范本!
2019/07/26 职场文书
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS
MYSQL常用函数介绍
2022/05/05 MySQL
使用python生成大量数据写入es数据库并查询操作(2)
2022/09/23 Python