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 相关文章推荐
教你如何把一篇文章按要求分段
Oct 09 PHP
php读取xml实例代码
Jan 28 PHP
php.ini中date.timezone设置分析
Jul 29 PHP
浅谈web上存漏洞及原理分析、防范方法(文件名检测漏洞)
Jun 29 PHP
php实现俄罗斯乘法实例
Mar 07 PHP
php实现约瑟夫问题的方法小结
Mar 23 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
Thinkphp框架开发移动端接口(2)
Aug 18 PHP
thinkPHP5.0框架简单配置作用域的方法
Mar 17 PHP
php面向对象之反射功能与用法分析
Mar 29 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
Thinkphp极验滑动验证码实现步骤解析
Nov 24 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 SQL防注入代码集合
2008/04/25 PHP
给PHP开发者的编程指南 第一部分降低复杂程度
2016/01/18 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
Z-Blog中用到的js代码
2007/03/15 Javascript
Javascript 键盘keyCode键码值表
2009/12/24 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
javascript操作JSON的要领总结
2012/12/09 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
jquery购物车实时结算特效实现思路
2013/09/23 Javascript
解析prototype,JQuery中跳出each循环的方法
2013/12/12 Javascript
JavaScript获取数组最小值和最大值的方法
2015/06/09 Javascript
酷! 不同风格页面布局幻灯片特效js实现
2021/02/19 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
JS中的作用域链
2017/03/01 Javascript
详解如何使用 vue-cli 开发多页应用
2017/12/16 Javascript
使用socket.io实现简单聊天室案例
2018/01/02 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
JavaScript canvas实现雪花随机动态飘落
2020/02/08 Javascript
Python实现字典去除重复的方法示例
2017/07/31 Python
python微信跳一跳系列之棋子定位颜色识别
2018/02/26 Python
python pcm音频添加头转成Wav格式文件的方法
2019/01/09 Python
python 爬虫百度地图的信息界面的实现方法
2019/10/27 Python
python实现根据给定坐标点生成多边形mask的例子
2020/02/18 Python
python自动生成sql语句的脚本
2021/02/24 Python
CSS3简单实现照片墙
2014/12/12 HTML / CSS
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
英国拖鞋购买网站:Bedroom Athletics
2020/02/28 全球购物
Lookfantastic澳大利亚官网:英国知名美妆购物网站
2021/01/07 全球购物
诺思信科技(南京)有限公司.NET笔试题答案
2013/07/06 面试题
二手房买卖协议书
2014/04/10 职场文书
2014年巴西世界杯口号
2014/06/05 职场文书
普通党员自我剖析材料
2014/10/07 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
Win10 heic文件怎么打开 ? Win10 heic文件打开教程
2022/04/06 数码科技
vue @ ~ 相对路径 路径别名设置方式
2022/06/05 Vue.js
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS