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网站基础优化方法小结
Sep 29 PHP
php读取xml实例代码
Jan 28 PHP
跟我学Laravel之路由
Oct 15 PHP
PHP中通过fopen()函数访问远程文件示例
Nov 18 PHP
php内嵌函数用法实例
Mar 20 PHP
基于linnux+phantomjs实现生成图片格式的网页快照
Apr 15 PHP
刷新PHP缓冲区为你的站点加速
Oct 10 PHP
php+redis在实际项目中HTTP 500: Internal Server Error故障排除
Feb 05 PHP
PHP实现合并两个排序链表的方法
Jan 19 PHP
详解php与ethereum客户端交互
Apr 28 PHP
PHP 实现手机端APP支付宝支付功能
Jun 07 PHP
RSA实现JS前端加密与PHP后端解密功能示例
Aug 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
AM/FM收音机的安装与调试
2021/03/02 无线电
PHP中的session永不过期的解决思路及实现方法分享
2011/04/20 PHP
PHP导出MySQL数据到Excel文件(fputcsv)
2011/07/03 PHP
浅析PHP中的UNICODE 编码与解码
2013/06/29 PHP
php判断表是否存在的方法
2015/06/18 PHP
php生成高清缩略图实例详解
2015/12/07 PHP
通过修改Laravel Auth使用salt和password进行认证用户详解
2017/08/17 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
caller和callee的区别介绍及演示结果
2013/03/10 Javascript
javascript计算当月剩余天数(天数计算器)示例代码
2014/01/09 Javascript
javascript使用smipleChart实现简单图表
2015/01/02 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
jQuery+css3实现转动的正方形效果(附demo源码下载)
2016/01/27 Javascript
jQuery图片轮播插件——前端开发必看
2016/05/31 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
Angularjs 动态改变title标题(兼容ios)
2016/12/29 Javascript
jquery实现超简单的瀑布流布局【推荐】
2017/03/08 Javascript
5分钟打造简易高效的webpack常用配置
2017/07/04 Javascript
js+html5实现半透明遮罩层弹框效果
2020/08/24 Javascript
浅析为什么a=&quot;abc&quot; 不等于 a=new String(&quot;abc&quot;)
2017/10/25 Javascript
解决angularjs service中依赖注入$scope报错的问题
2018/10/02 Javascript
聊聊鉴权那些事(推荐)
2019/08/22 Javascript
解决layui动态添加的元素click等事件触发不了的问题
2019/09/20 Javascript
vue+导航锚点联动-滚动监听和点击平滑滚动跳转实例
2019/11/13 Javascript
python 写入csv乱码问题解决方法
2016/10/23 Python
python3.5基于TCP实现文件传输
2020/03/20 Python
对numpy中二进制格式的数据存储与读取方法详解
2018/11/01 Python
检测tensorflow是否使用gpu进行计算的方式
2020/02/03 Python
Pycharm激活码激活两种快速方式(附最新激活码和插件)
2020/03/12 Python
浅谈JupyterNotebook导出pdf解决中文的问题
2020/04/22 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
工程造价与财务管理专业应届生求职信
2013/10/06 职场文书
《我是什么》教学反思
2016/02/16 职场文书
《陶罐和铁罐》教学反思
2016/03/03 职场文书
日本读研:怎样写好一篇日本研究计划书?
2019/07/15 职场文书