CodeIgniter框架验证码类库文件与用法示例


Posted in PHP onMarch 18, 2017

本文实例讲述了CodeIgniter框架验证码类库文件与用法。分享给大家供大家参考,具体如下:

折腾了我四五个小时,终于,ci的验证码类库成功的整出来了。

下面请看源码:

在application/libraries建立Authcode.php文件,代码如下:

<?php
class Authcode
{
 var $CI;
 var $fontPath;//字体路径
 var $image;
 var $charLen   = 4; //生成几位验证码
 var $arrChr   = array();//验证码字符
 var $width    = 83; //图片宽
 var $height   = 24; //图片高
 var $bgcolor   = "#ffffff"; //背景色
 var $showNoisePix  = true; //生成杂点
 var $noiseNumPix  = 80; //生成杂点数量
 var $showNoiseLine  = true; //生成杂线
 var $noiseNumLine  = 2; //生成杂线数量
 var $showBorder  = true; //边框,当杂点、线一起作用的时候,边框容易受干扰
 var $borderColor  = "#000000";
 function Authcode()
 {
  $this->CI = & get_instance();
  $this->fontPath = realpath(dirname(__FILE__) . '/fonts/'); //字体文件
  //$this->arrChr   = array_merge(range(1, 9) , range('A', 'Z'));//数字字母验证码
  //$this->arrChr   = range('A', 'Z');//纯字母验证码
  $this->arrChr = range(0, 9);//纯数字验证码
 }
 /**
  * 显示验证码
  *
  */
 function show()
 {
  $this->image = imageCreate($this->width, $this->height);
  $this->back = $this->getColor($this->bgcolor);
  imageFilledRectangle($this->image, 0, 0, $this->width, $this->height, $this->back);
  $size = $this->width / $this->charLen - 4;
  if ($size > $this->height) {
   $size = $this->height;
  }
  $left = ($this->width - $this->charLen * ($size + $size / 10)) / $size + 5;
  $code = '';
  for($i = 0; $i < $this->charLen; $i ++) {
   $randKey = rand(0, count($this->arrChr) - 1);
   $randText = $this->arrChr[$randKey];
   $code .= $randText;
   $textColor = imageColorAllocate($this->image, rand(0, 100), rand(0, 100), rand(0, 100));
   $font = $this->fontPath . '/' . rand(1, 5) . ".ttf";
   $randsize = rand($size - $size / 10, $size + $size / 10);
   $location = $left + ($i * $size + $size / 10);
   @imagettftext($this->image, $randsize, rand(- 18, 18), $location, rand($size - $size / 10, $size + $size / 10) + 2, $textColor, $font, $randText);
  }
  if ($this->showNoisePix == true) {
   $this->setNoisePix();
  }
  if ($this->showNoiseLine == true) {
   $this->setNoiseLine();
  }
  if ($this->showBorder == true) {
   $this->borderColor = $this->getColor($this->borderColor);
   imageRectangle($this->image, 0, 0, $this->width - 1, $this->height - 1, $this->borderColor);
  }
  $this->CI->session->set_userdata('auth_code', $code);
  ob_clean();
  header("Content-type: image/jpeg");
  imagejpeg($this->image);
  imagedestroy($this->image);
 }
 /**
  * 显示验证码的JS调用
  *
  */
 function showScript()
 {
  //显示验证码
  echo "var img_src = '/imgauthcode/show/?';\n";
  echo "document.writeln('<img id=\"img_authcode\" src=\"' + img_src + Math.random() + '\" style=\"cursor:hand;\" onclick=\"this.src=img_src + Math.random();\" alt=\"点击更换图片\">');";
 }
 /**
  * 检查验证码是否正确
  *
  * @param string $auth_code
  * @return bool
  */
 function check($auth_code = null)
 {
  return ($this->CI->session->userdata('auth_code') && $auth_code) ? ($this->CI->session->userdata('auth_code') === $auth_code) : false;
 }
 function getColor($color)
 {
  $color = eregi_replace("^#", "", $color);
  $r = $color[0] . $color[1];
  $r = hexdec($r);
  $b = $color[2] . $color[3];
  $b = hexdec($b);
  $g = $color[4] . $color[5];
  $g = hexdec($g);
  $color = imagecolorallocate($this->image, $r, $b, $g);
  return $color;
 }
 function setNoisePix()
 {
  for($i = 0; $i < $this->noiseNumPix; $i ++) {
   $randColor = imageColorAllocate($this->image, rand(0, 255), rand(0, 255), rand(0, 255));
   imageSetPixel($this->image, rand(0, $this->width), rand(0, $this->height), $randColor);
  }
 }
 function setNoiseLine()
 {
  for($i = 0; $i < $this->noiseNumLine; $i ++) {
   $randColor = imageColorAllocate($this->image, rand(0, 255), rand(0, 255), rand(0, 255));
   imageline($this->image, rand(1, $this->width), rand(1, $this->height), rand(1, $this->width), rand(1, $this->height), $randColor);
  }
 }
}

Authcode.php代码结束

在Controller中,有个admin类,其中有两个方法:

Class Admin extends CI_Controller{
 function __construct()
 {
  parent::__construct();
  $this->load->library('Authcode');
 }
function captcha(){
  if($_POST){
    if ($this->authcode->check($this->input->post('gd_pic'))) {
    echo "right";
   } else {
    echo '验证码不正确,请重新输入';
   }
  }else{
   $this->load->view('demo');
  }
 }
 function show_captcha(){ //此方法用于显示验证码图片,归一个view中的img的src调用
  $this->authcode->show();
 }
}

下面是在视图view中创建一个demo.php了,代码如下:

<?php echo form_open('c=admin&m=captcha');?>
<input type="text" name="gd_pic" />
<img src="<?php echo base_url('?c=admin&m=show_captcha');?>" ><br>
<input type="submit" name="submit" value="验证" />
<?php echo form_close();?>

OK. 一切结束,终于正常运行了。

希望本文所述对大家基于CodeIgniter框架的PHP程序设计有所帮助。

PHP 相关文章推荐
提高PHP编程效率 引入缓存机制提升性能
Feb 15 PHP
php实现简单的上传进度条
Nov 17 PHP
WordPress中用于获取文章信息以及分类链接的函数用法
Dec 18 PHP
PHP简单处理表单输入的特殊字符的方法
Feb 03 PHP
解读PHP的Yii框架中请求与响应的处理流程
Mar 17 PHP
深入理解PHP中的empty和isset函数
May 26 PHP
thinkPHP分组后模板无法加载问题解决方法
Jul 12 PHP
/etc/php-fpm.d/www.conf 配置注意事项
Feb 04 PHP
PHP操作Postgresql封装类与应用完整实例
Apr 24 PHP
php实现数组重复数字统计实例
Sep 30 PHP
PDO::lastInsertId讲解
Jan 29 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 PHP
YII框架批量插入数据的方法
Mar 18 #PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 #PHP
thinkPHP5.0框架模块设计详解
Mar 18 #PHP
thinkPHP5.0框架命名空间详解
Mar 18 #PHP
thinkPHP5.0框架自动加载机制分析
Mar 18 #PHP
thinkPHP5.0框架引入Traits功能实例分析
Mar 18 #PHP
2017年最新PHP经典面试题目汇总(上篇)
Mar 17 #PHP
You might like
APMServ使用说明
2006/10/23 PHP
比较详细PHP生成静态页面教程
2012/01/10 PHP
ThinkPHP开发框架函数详解:C方法
2015/08/14 PHP
javascript getElementsByName()的用法说明
2009/07/31 Javascript
JavaScript打开word文档的实现代码(c#)
2012/04/16 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
Angularjs修改密码的实例代码
2017/05/26 Javascript
JS原型继承四步曲及原型继承图一览
2017/11/28 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
详解Chai.js断言库API中文文档
2018/01/31 Javascript
vue+element实现批量删除功能的示例
2018/02/28 Javascript
vuex直接赋值的三种方法总结
2018/09/16 Javascript
JavaScript用document.write()输出换行的示例代码
2020/11/26 Javascript
[32:56]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第二场 12.11
2020/12/16 DOTA
Python判断Abundant Number的方法
2015/06/15 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
2017/10/13 Python
python调用系统ffmpeg实现视频截图、http发送
2018/03/06 Python
解决Python pandas df 写入excel 出现的问题
2018/07/04 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
face++与python实现人脸识别签到(考勤)功能
2019/08/28 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python socket聊天脚本代码实例
2020/01/02 Python
python实现扑克牌交互式界面发牌程序
2020/04/22 Python
Python基于当前时间批量创建文件
2020/05/07 Python
Python3开发环境搭建详细教程
2020/06/18 Python
python virtualenv虚拟环境配置与使用教程详解
2020/07/13 Python
好药师网上药店:安全合法的网上药品零售药房
2017/02/15 全球购物
澳大利亚运动鞋商店:Platypus Shoes
2019/09/27 全球购物
Edwaybuy西班牙:小米在线商店
2019/12/04 全球购物
医学毕业生自荐信
2013/10/11 职场文书
护士个人自我鉴定
2014/03/24 职场文书
法人委托书
2014/07/31 职场文书
励志演讲稿300字
2014/08/21 职场文书
介绍信如何写
2015/01/31 职场文书