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 设计模式之 单例模式
Dec 19 PHP
php 获取可变函数参数的函数
Aug 26 PHP
PHP5.3安装Zend Guard Loader图文教程
Sep 29 PHP
基于PHP如何把汉字转化为拼音
Dec 11 PHP
ThinkPHP框架安全实现分析
Mar 14 PHP
php  单例模式详细介绍及实现源码
Nov 05 PHP
php中Ioc(控制反转)和Di(依赖注入)
May 07 PHP
swoole和websocket简单聊天室开发
Nov 18 PHP
PHP+JS实现的实时搜索提示功能
Mar 13 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 PHP
PHP常用函数之base64图片上传功能详解
Oct 21 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常见加密函数用法示例【crypt与md5】
2019/01/27 PHP
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
离开当前页面前使用js判断条件提示是否要离开页面
2014/05/02 Javascript
Javascript实现跑马灯效果的简单实例
2016/05/31 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
2016/08/24 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
jquery DataTable实现前后台动态分页
2017/06/17 jQuery
详解angularJS自定义指令间的相互交互
2017/07/05 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
解读ES6中class关键字
2017/11/20 Javascript
使用JavaScript破解web
2018/09/28 Javascript
利用Vconsole和Fillder进行移动端抓包调试方法
2019/03/05 Javascript
Vue过滤器,生命周期函数和vue-resource简单介绍
2021/01/12 Vue.js
Python 条件判断的缩写方法
2008/09/06 Python
python登录豆瓣并发帖的方法
2015/07/08 Python
python中的编码知识整理汇总
2016/01/26 Python
python3实现UDP协议的服务器和客户端
2017/06/14 Python
Python实现获取照片拍摄日期并重命名的方法
2017/09/30 Python
学python安装的软件总结
2019/10/12 Python
django序列化serializers过程解析
2019/12/14 Python
linux环境下安装python虚拟环境及注意事项
2020/01/07 Python
python 弧度与角度互转实例
2020/04/15 Python
Android Q之气泡弹窗的实现示例
2020/06/23 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
css3动画效果抖动解决方法
2018/09/03 HTML / CSS
浅谈html5之sse服务器发送事件EventSource介绍
2017/08/28 HTML / CSS
Nike台湾官方商店:Nike.com (TW)
2017/08/16 全球购物
亚马逊墨西哥站:Amazon.com.mx
2018/08/26 全球购物
时尚设计师手表:The Watch Cabin
2018/10/06 全球购物
校园之星获奖感言
2014/01/29 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
积极向上的团队口号
2014/06/06 职场文书
事业单位人员的自我评价范文
2014/09/21 职场文书
python 常用的异步框架汇总整理
2021/06/18 Python
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技