在 Codeigniter 中可以利用Captcha Helper 验证码辅助函数用来生成图片验证码,具体我没有试过,但是看了下手册感觉不是一个灵活好用的验证码生成方法,下面我就给出我用 Codeigniter 在项目中如何生成一个简单的验证码,同时可以点击验证码图片刷新。

1.首先在控制器中写一个生成验证码的方法。我这里放在 MY_Conntroller(在 core/下面,具体原因请看《Codeigniter 控制器继承问题》),很简单,就是生成验证码的一般步骤。

/*
* @function    验证码
* @param   string  $num    验证码
* @param   int $imagewidth 验证码区域宽度
* @param   int $imageheight验证码区域高度
*/
function verification_code($num='',$imagewidth=60,$imageheight=80)
{
  $numimage = imagecreate($imagewidth,$imageheight);
  imagecolorallocate($numimage,240,240,240);
  for($i=0;$i<strlen($num);$i++){
      $x = mt_rand(1,8)+$imagewidth*$i/4;
      $y = mt_rand(1,$imageheight/4);
 		    $color=imagecolorallocate($numimage,mt_rand(0,150),mt_rand(0,150),mt_rand(0,150));
      imagestring($numimage,5,$x,$y,$num[$i],$color);
  }

  for($i=0;$i<200;$i++){
      $randcolor=imagecolorallocate($numimage,rand(200,255),rand(200,255),rand(200,255));
      imagesetpixel($numimage,rand()%70,rand()%20,$randcolor);
  }
  header("Content-type:image/png");
  imagepng($numimage);
  imagedestroy($numimage);
}

2.在 Html 页面需要显示验证码的部分加入一下代码。

<div>
<div>
<label for="verification">验证码:</label>
</div>
<div>
<input type="text" id="code" name="code" value="" style="width:80px;"/>&nbsp;&nbsp;&nbsp;&nbsp;
<img src="<?php echo site_url('administrator/home/verification_code'); ?>" id="ver_code" alt="点击刷新" />
<input type="hidden" name="img_url" value="<?php echo site_url('administrator/home/verification_code'); ?>">
</div>
</div>

备注:

中的 src 输出的路径就是验证码函数路径,因为 home 控制器是继承 MY_Conntroller,所以可以掉用到父类的方法。

hidden 也是存放验证码函数路径,为什么要这样做?看下下面的 js 代码就知道了。

3.Js 主要是控制生成随机的验证码和点击刷新验证码。

var cer_code;
//页面加载显示验证码
img_url = $("input[name=img_url]").val();
cer_code = show_code('#ver_code',img_url,60,30);
/*
* 点击切换验证码
*/
$("#ver_code").click(function(){
cer_code =show_code('#ver_code',img_url,60,30);
})

生成随机码的 js 片段:

/*
* @function    生成验证码
* @param   string  selector 验证码图片选择器
* @param   string  src 生成验证码地址
* @param   int width   验证码区域宽度
* @param   int hight   验证码区域高度
*/
function show_code(selector,img_url,width,hight)
{
num = '';
for(i=0;i&lt;4;i++){
tmp =  Math.ceil((Math.random() * 15));
if(tmp &gt; 9){
switch(tmp){
case(10):
num += 'a';
break;
case(11):
num += 'b';
break;
case(12):
num += 'c';
break;
case(13):
num += 'd';
break;
case(14):
num += 'e';
break;
case(15):
num += 'f';
break;
}
}else{
num += tmp;
}
}
$(selector).attr('src',img_url+'/'+num+'/'+width+'/'+hight);
return num;
}

这样一个简单的基于 Codeigniter 验证码就实现了!

转载请注明: 转载自Ryan 是菜鸟 | LNMP 技术栈笔记

如果觉得本篇文章对您十分有益,何不 打赏一下

谢谢打赏

本文链接地址: Codeigniter 验证码

知识共享许可协议 本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可