PHP验证码-CI框架

一款开源的cms稍微改下

 

/**
 * Security_code_model 验证码类
 * @package Security_code_model
 */
class Security_code_model extends CI_Model {
    public $config = array();
    function __construct(){
        parent::__construct();
        $this->config = array(
            'font_size'   => 14,
            'img_height'  => 24,
            'word_type'  => 1,   // 1:数字  2:英文   3:单词
            'img_width'   => 68,
            'use_boder'   => TRUE,
            'font_file'   => dirname(__FILE__).'/security.inc/ggbi.ttf',
            'wordlist_file'   => dirname(__FILE__).'/security.inc/words.txt',
            'filter_type' => 5);
    }
    function show_img(){
        if (!$this->echo_validate_image($this->config))
        {
            // 如果不成功则初始化一个默认验证码
            @session_start();
            $_SESSION['securimage_code_value'] = strtolower('abcd');
            $im = @imagecreatefromjpeg(dirname(__FILE__).'/security.inc/vdcode.jpg');
            header("Pragma:no-cache/r/n");
            header("Cache-Control:no-cache/r/n");
            header("Expires:0/r/n");
            imagejpeg($im);
            imagedestroy($im);
        }
    }
    function echo_validate_image( $config = array() )
    {
        @session_start();
       
        //主要参数
        $font_size   = isset($config['font_size']) ? $config['font_size'] : 14;
        $img_height  = isset($config['img_height']) ? $config['img_height'] : 24;
        $img_width   = isset($config['img_width']) ? $config['img_width'] : 68;
        $font_file   = isset($config['font_file']) ? $config['font_file'] : PATH_DATA.'/data/font/ggbi.ttf';
        $use_boder   = isset($config['use_boder']) ? $config['use_boder'] : TRUE;
        $filter_type = isset($config['filter_type']) ? $config['filter_type'] : 0;
       
        //创建图片,并设置背景色
        $im = @imagecreate($img_width, $img_height);
        imagecolorallocate($im, 255,255,255);
       
        //文字随机颜色
        $fontColor[]  = imagecolorallocate($im, 0x15, 0x15, 0x15);
        $fontColor[]  = imagecolorallocate($im, 0x95, 0x1e, 0x04);
        $fontColor[]  = imagecolorallocate($im, 0x93, 0x14, 0xa9);
        $fontColor[]  = imagecolorallocate($im, 0x12, 0x81, 0x0a);
        $fontColor[]  = imagecolorallocate($im, 0x06, 0x3a, 0xd5);
       
        //获取随机字符
        $rndstring  = '';
        if ($config['word_type'] != 3)
        {
            for($i=0; $i<4; $i++)
            {
                if ($config['word_type'] == 1)
                {
                    $c = chr(mt_rand(48, 57));
                } else if($config['word_type'] == 2)
                {
                    $c = chr(mt_rand(65, 90));
                    if( $c=='I' ) $c = 'P';
                    if( $c=='O' ) $c = 'N';
                }
                $rndstring .= $c;
            }
        } else {
            $fp = @fopen($config['wordlist_file'], 'rb');
            if (!$fp) return FALSE;
   
            $fsize = filesize($config['wordlist_file']);
            if ($fsize < 32) return FALSE;
   
            if ($fsize < 128)
            {
              $max = $fsize;
            } else {
              $max = 128;
            }
   
            fseek($fp, rand(0, $fsize - $max), SEEK_SET);
            $data = fread($fp, 128);
            fclose($fp);
            $data = preg_replace("//r?/n/", "/n", $data);
   
            $start = strpos($data, "/n", rand(0, 100)) + 1;
            $end   = strpos($data, "/n", $start);
            $rndstring  = strtolower(substr($data, $start, $end - $start));
        }
       
        $_SESSION['securimage_code_value'] = strtolower($rndstring);
   
        $rndcodelen = strlen($rndstring);
   
        //背景横线
        $lineColor1 = imagecolorallocate($im, 0xda, 0xd9, 0xd1);
        for($j=3; $j<=$img_height-3; $j=$j+3)
        {
            imageline($im, 2, $j, $img_width - 2, $j, $lineColor1);
        }
       
        //背景竖线
        $lineColor2 = imagecolorallocate($im, 0xda,0xd9,0xd1);
        for($j=2;$j<100;$j=$j+6)
        {
            imageline($im, $j, 0, $j+8, $img_height, $lineColor2);
        }
   
        //画边框
        if( $use_boder && $filter_type == 0 )
        {
            $bordercolor = imagecolorallocate($im, 0x9d, 0x9e, 0x96);
            imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $bordercolor);
        }
       
        //输出文字
        $lastc = '';
        for($i=0;$i<$rndcodelen;$i++)
        {
            $bc = mt_rand(0, 1);
            $rndstring[$i] = strtoupper($rndstring[$i]);
            $c_fontColor = $fontColor[mt_rand(0,4)];
            $y_pos = $i==0 ? 4 : $i*($font_size+2);
            $c = mt_rand(0, 15);
            @imagettftext($im, $font_size, $c, $y_pos, 19, $c_fontColor, $font_file, $rndstring[$i]);
            $lastc = $rndstring[$i];
        }
       
        //图象效果
        switch($filter_type)
        {
            case 1:
                imagefilter ( $im, IMG_FILTER_NEGATE);
                break;
            case 2:
                imagefilter ( $im, IMG_FILTER_EMBOSS);
                break;
            case 3:
                imagefilter ( $im, IMG_FILTER_EDGEDETECT);
                break;
            default:
                break;
        }
   
        header("Pragma:no-cache/r/n");
        header("Cache-Control:no-cache/r/n");
        header("Expires:0/r/n");
   
        //输出特定类型的图片格式,优先级为 gif -> jpg ->png
        //dump(function_exists("imagejpeg"));
       
        if(function_exists("imagejpeg"))
        {
            header("content-type:image/jpeg/r/n");
            imagejpeg($im);
        }
        else
        {
            header("content-type:image/png/r/n");
            imagepng($im);
        }
        imagedestroy($im);
        exit();
    }
   
}

 

下载地址:http://u.115.com/file/f15437c04

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值