个人写的PHP验证码生成类分享
程序员文章站
2022-03-25 21:55:09
此验证码类直接拿去就可以用,也可以参考!
其中类成员codestr是生成的验证码字符串:
此验证码类直接拿去就可以用,也可以参考!
其中类成员codestr是生成的验证码字符串:
<?php /** * 验证码 */ class code{ // 1. 定义各个成员 有宽、高、画布、字数、类型、画类型 private $width; //宽度 private $height; //高度 private $num; //验证码字数 private $imgtype; //生成图片类型 private $type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小写数字混合 private $hb; //画布 public $codestr; // 验证码字串 public function __construct($height=20,$num=4,$imgtype="jpeg",$type=1){ $this->width = $num*20; $this->height = $height; $this->num = $num; $this->imgtype = $imgtype; $this->type = $type; $this->codestr = $this->codestr(); $this->zuhe(); } // 2. 定义随机获取字符串函数 private function codestr(){ switch($this->type){ case 1: // 类型为1 获取1-9随机数 $str = implode("",array_rand(range(0,9),$this->num)); break; case 2: // 类型为2 获取a-z随机小写字母 $str = implode("",array_rand(array_flip(range(a,z)),$this->num)); break; case 3: // 类型为3 获取数字,小写字母,大写字母 混合 for($i=0;$i<$this->num;$i++){ $m = rand(0,2); switch($m){ case 0: $o = rand(48,57); break; case 1: $o = rand(65,90); break; case 2: $o = rand(97,122); break; } $str .= sprintf("%c",$o); } break; } return $str; } // 3. 初始化画布图像资源 private function hb(){ $this->hb = imagecreatetruecolor($this->width,$this->height); } // 4. 生成背景颜色 private function bg(){ return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250)); } // 5. 生成字体颜色 private function font(){ return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100)); } // 6. 填充背景颜色 private function bgcolor(){ imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->bg()); } // 7. 干扰点 private function ganrao(){ $sum=floor(($this->width)*($this->height)/3); for($i=0;$i<$sum;$i++){ imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->bg()); } } // 8. 随机直线 弧线 private function huxian(){ for($i=0;$i<$this->num;$i++){ imagearc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->bg()); } } // 9. 写字 private function xiezi(){ for($i=0;$i<$this->num;$i++){ $x=ceil($this->width/$this->num)*$i; $y=rand(1,$this->height-15); imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->font()); } } // 10. 输出 private function outimg(){ $shuchu="image".$this->imgtype; $header="content-type:image/".$this->imgtype; if(function_exists($shuchu)){ header($header); $shuchu($this->hb); }else{ exit("gd库没有此类图像"); } } // 11. 拼装 private function zuhe(){ $this->hb(); $this->bgcolor(); $this->ganrao(); $this->huxian(); $this->xiezi(); $this->outimg(); } public function getcodestr(){ return $this->codestr; } } ?>
上一篇: Nginx配置详解
下一篇: 糖果 南阳acm589