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 相关文章推荐
GBK的页面输出JSON格式的php函数
Feb 16 PHP
PHP 验证码不显示只有一个小红叉的解决方法
Sep 30 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
微信公众平台开发关注及取消关注事件的方法
Dec 23 PHP
[原创]php获取数组中键值最大数组项的索引值
Mar 17 PHP
PHP中addslashes()和stripslashes()实现字符串转义和还原用法实例
Jan 07 PHP
PHP基于接口技术实现简单的多态应用完整实例
Apr 26 PHP
php检测mysql表是否存在的方法小结
Jul 20 PHP
yii2.0整合阿里云oss的示例代码
Sep 19 PHP
php中通用的excel导出方法实例
Dec 30 PHP
PHP实现抽奖功能实例代码
Jun 30 PHP
PHP设计模式之命令模式示例详解
Dec 20 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
mysql5详细安装教程
2007/01/15 PHP
PHP获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
php Session存储到Redis的方法
2013/11/04 PHP
php实现微信公众平台账号自定义菜单类
2014/12/02 PHP
thinkPHP数据查询常用方法总结【select,find,getField,query】
2017/03/15 PHP
详解cookie验证的php应用的一种SSO解决办法
2017/10/20 PHP
JavaScript 浏览器验证代码(来自discuz)
2010/07/17 Javascript
jquery根据锚点offset值实现动画切换
2014/09/11 Javascript
javascript实现复选框选中属性
2015/03/25 Javascript
javascript十六进制及二进制转化的方法
2015/05/06 Javascript
JavaScript实现模仿桌面窗口的方法
2015/07/18 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
jQuery滚动监听实现商城楼梯式导航效果
2017/03/06 Javascript
微信小程序中form 表单提交和取值实例详解
2017/04/20 Javascript
Vue中的$set的使用实例代码
2018/10/08 Javascript
Vue动态路由缓存不相互影响的解决办法
2019/02/19 Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
2020/04/20 Javascript
[13:55]Newbee vs Team Spirit
2018/06/07 DOTA
python计算最大优先级队列实例
2013/12/18 Python
Ubuntu 16.04 LTS中源码安装Python 3.6.0的方法教程
2016/12/27 Python
Django自定义认证方式用法示例
2017/06/23 Python
详解Django rest_framework实现RESTful API
2018/05/24 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
给我一面国旗 python帮你实现
2019/09/30 Python
python3中的logging记录日志实现过程及封装成类的操作
2020/05/12 Python
基于Python快速处理PDF表格数据
2020/06/03 Python
对CSS3选择器的研究(详解)
2016/09/16 HTML / CSS
诺心蛋糕官网:LE CAKE
2018/08/25 全球购物
夜大毕业自我鉴定
2013/10/11 职场文书
军训的自我鉴定
2013/12/10 职场文书
校园达人秀策划书
2014/01/12 职场文书
《春雨》教学反思
2014/04/24 职场文书
同学聚会策划方案
2014/06/06 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书