<?php
<img src="https://img-blog.csdn.net/20160902150110188?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
Class Verify
{
//一些变量
//高
protected $height;
//宽
protected $width;
//图片类型
protected $imgType;
//文字类型
protected $codeType;
//文字的个数
protected $num;
//验证码字符串
protected $verifyCode;
//保存验证码的资源
protected $res;
//初始化这些变量
public function __construct($width=100,$height=50,$imgType='png',$codeType='numOnly',$num=4)
{
$this->width = $width;
$this->height = $height;
$this->imgType = $imgType;
$this->codeType = $codeType;
$this->num = $num;
$this->verifyCode = $this->createVerifyCode();
}
//成员方法
//1.创建验证码字符串
public function createVerifyCode()
{
switch ($this->codeType) {
case 'letterOnly':
$str = implode('',array_rand(array_flip(range('a','z')),$this->num));
break;
case 'numOnly':
$str = implode('',array_rand(range(0,9),$this->num));
break;
case 'mix':
$string = 'ABCDEFGHGKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz23456789';
$str = substr(str_shuffle($string),$this->num);
break;
}
return $str;
}
//2.输出图片
public function outImg()
{
//创建画布
$this->createImg();
//背景分配颜色
$this->fillBgColor();
//画干扰点
$this->fillPix();
//画干扰线
$this->fillArc();
//写字
$this->writeFont();
//输出类型及图片
$this->output();
}
function createImg()
{
$this->res = imagecreatetruecolor ($this->width,$this->height);
}
function fillBgColor()
{
imagefill($this->res,0,0,$this->lightColor());
}
function lightColor()
{
return imagecolorallocate($this->res,mt_rand(130,255),mt_rand(130,255),mt_rand(130,255));
}
function darkColor()
{
return imagecolorallocate($this->res,mt_rand(0,120),mt_rand(0,120),mt_rand(0,120));
}
function fillPix()
{
$num = $this->pixNum();
for ($i=0;$i<$num;$i++) {
imagesetpixel($this->res,mt_rand(0,$this->width),mt_rand(0,$this->height),$this->darkColor());
}
}
function pixNum()
{
$num = ceil(($this->width * $this->height)/$this->num/10);
return $num;
}
function fillArc()
{
for ($i=0;$i<6;$i++) {
imagearc ($this->res,mt_rand(10,$this->width-10),mt_rand(10,$this->height-10),mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,180),mt_rand(181,360),$this->darkColor());
}
}
function writeFont()
{
for ($i=0;$i<$this->num;$i++) {
$width = ceil($this->width / $this->num);
$x = $width * $i;
$y = mt_rand(5,$this->height-20);
$c = $this->verifyCode[$i];
imagechar ($this->res,5,$x,$y,$c,$this->darkColor());
}
}
function output()
{
$func = 'image'.$this->imgType;
$mime = 'Content-type:image/'.$this->imgType;
header($mime);
$func($this->res);
}
}
php中验证码类
最新推荐文章于 2024-09-12 09:31:27 发布