时间:2021-07-01 10:21:17 帮助过:19人阅读
本文实例讲述了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. 一切结束,终于正常运行了。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
关于CI框架的表单验证分析
如何解决Nginx和CI框架出现404错误
以上就是关于CodeIgniter框架验证码类库文件与用法的分析的详细内容,更多请关注Gxl网其它相关文章!