php验证码类

写了个验证码类,中文的需要载入字体,这里就不放上面了。

这个类比较简单,封装度并不是太高,不过够用了,能做10以内的加减乘法

代码如下:

<?php

   /*
    * 验证码类
    * @param $len  几位数的验证码
    * @param $w    画布的大小(验证码图片的宽度)
    * @param $h    验证码图片的高度
    * @param $font-size   写入到画布上的字体的大小,选值为1-5,默认是5,最大字体
    * @param $pixlen      干扰像素的个数
    * @param $linelen     干扰线个数
    *
    */
   class Captcha{

       protected  $len;
       protected  $w;
       protected  $h;
       protected  $fontsize;
       protected  $pixlen;
       protected  $linelen;

    public function __construct($len='2',$w='145',$h='25',$fontsize='5',$pixlen='200',$linelen='50') {

       $this->len = $len;
       $this->w = $w;
       $this->h = $h;
       $this->fontsize = $fontsize;
       $this->pixlen = $pixlen;
       $this->linelen = $linelen;

    }

       public function checkcode(){

         //载入一个新的字体
         //imageloadfont('ygymbxsjt.ttf');
         //定义两个随机的数字
         //随机两个数中间的符号
         $arr = array('+','-','*');
         $opt = $arr[array_rand($arr)];
         $a = rand(1,9);
         $b = rand(1,9);
         switch ($opt){

             case '+':
                 $verify = "$a + $b =";
                $_SESSION['verify'] = $a + $b;
                break;
             case '-':
                 $verify = "$a - $b =";
                $_SESSION['verify'] = $a - $b;
                break;
             case '*':
                 $verify = "$a * $b =";
                $_SESSION['verify'] = $a * $b;
                break;
         }

         //下面就是创建画布、使用画布的过程了
         //创建画布
         $img = imagecreatetruecolor($this->w,$this->h);

         //操作画布

         //定义使用到的颜色
         //背景色
         $bgcolor = imagecolorallocate($img, 50, 50, 50);
         //干扰像素颜色
         $pixcolor = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
         //干扰线颜色
         $linecolor = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
         //字体颜色
         $fontcolor = imagecolorallocate($img,255,255,255);


         //填充画布
         //将整个画布都填充为$bgcolor色
         imagefill($img,0,0,$bgcolor);

         //画干扰像素
         for($i=0; $i< $this->pixlen; $i++){

           imagesetpixel($img,rand(0,$this->w),rand(0,$this->h),$pixcolor);
         }
         //画干扰线
         for($i=0; $i< $this->linelen; $i++){

           imageline($img, rand(0,$this->w), rand(0,$this->h), rand(0,$this->w), rand(0,$this->h), $linecolor);
         }

         //设置字体居中显示
         //字体的宽和高
         $fwidth = imagefontwidth($this->fontsize) * 4;
         $fheight = imagefontheight($this->fontsize);
         //计算写入到画布上的x和y值
         $x = ($this->w - $fwidth)/2;
         $y = ($this->h - $fheight)/2;
         //将字体写到画布上
         imagestring($img,$this->fontsize,$x,$y,$verify,$fontcolor);

         //输出画布
         header("content-type:text/html;charset=utf-8");

         header("content-type:image/png");
         imagepng($img);
         //销毁画布
         imagedestroy($img);

      }
   }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值