美文网首页
一个验证码生成类

一个验证码生成类

作者: 胡乱唱歌ing | 来源:发表于2019-06-17 17:41 被阅读0次

1.定义验证码字符数,生成验证码图片的宽高

public $length = 4; //默认输出4个字符
public $x = 120; //画布长度
public $y = 40; //画布高度
public $str ; //验证码

2.生成验证码字符

public function create_str()
{
        $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $this->str = substr(str_shuffle($str), 0,$this->length);
}

3.创建画布,写入验证码

//创建画布
$im = imagecreatetruecolor($this->x,$this->y); 
 //创建画布的背景色
$bgcolor = imagecolorallocate($im,255,255,255);
$textcolor = imagecolorallocate($im,0,0,0);
//画布填充背景色
imagefill($im,0,0,$bgcolor);
$space_per_char = $this->x / (strlen($this->str) + 1);
//画布上写验证码
for($i=0;$i<strlen($this->str);$i++) {
     $fontsize = 14+mt_rand(0,8);
     $angle = -20+rand(0,50);
     $x = ($i+0.3)*$space_per_char;
     $y = $this->y-($this->y * 0.2+rand(4,14));
            
     imagettftext($im,$fontsize,$angle,$x,$y,$textcolor,'texb.ttf',$this->str[$i]);
}

4.画一些干扰线条

$colors[] = imagecolorallocate($im,128,64,192);
$colors[] = imagecolorallocate($im,192,64,128);
$colors[] = imagecolorallocate($im,108,192,64);
$colors[] = imagecolorallocate($im,138,122,104);
for($i=0;$i<100;$i++)
{
      $x1 = rand(5,$this->x - 5);
      $y1 = rand(5,$this->y - 5);
      $x2 = $x1 - 4 + rand(0,10);
      $y2 = $y1 - 4 + rand(0,10);
      $color = $colors[rand(0,count($colors)-1)];
      imageline($im,$x1,$y1,$x2,$y2,$color);
}

5.输出画布到浏览器

header ('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

完整代码

class VerificationCode {

    public $length = 4; //默认输出4个字符
    public $x = 120; //画布长度
    public $y = 40; //画布高度
    public $str ; //验证码

    public function __construct($x="",$y="",$length="")
    {
        $this->x = $x ? $x : $this->x;
        $this->y = $y ? $y : $this->y;
        $this->length = $length ? $length : $this->length;

        $this->create_str();
    }

    //生成验证码字符
    public function create_str()
    {
        $str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $this->str = substr(str_shuffle($str), 0,$this->length);
    }

    //获取验证码字符
    public function get_str()
    {
        return $this->str;
    }


    //创建验证码画布
    public function create()
    {
        //创建画布
        $im = imagecreatetruecolor($this->x,$this->y); 
        //创建画布的背景色
        $bgcolor = imagecolorallocate($im,255,255,255);
        $textcolor = imagecolorallocate($im,0,0,0);
        //画布填充背景色
        imagefill($im,0,0,$bgcolor);
        $space_per_char = $this->x / (strlen($this->str) + 1);
        //画布上写验证码
        for($i=0;$i<strlen($this->str);$i++) {
            $fontsize = 14+mt_rand(0,8);
            $angle = -20+rand(0,50);
            $x = ($i+0.3)*$space_per_char;
            $y = $this->y-($this->y * 0.2+rand(4,14));
            imagettftext($im,$fontsize,$angle,$x,$y,$textcolor,'texb.ttf',$this->str[$i]);

        }

        //画一些线条
        $this->write_line($im);

        header ('Content-Type: image/png');
        imagepng($im);
        imagedestroy($im);
    }
    //画一些线条
    public function write_line($im)
    {
        $colors[] = imagecolorallocate($im,128,64,192);
        $colors[] = imagecolorallocate($im,192,64,128);
        $colors[] = imagecolorallocate($im,108,192,64);
        $colors[] = imagecolorallocate($im,138,122,104);
        for($i=0;$i<100;$i++)
        {
            $x1 = rand(5,$this->x - 5);
            $y1 = rand(5,$this->y - 5);
            $x2 = $x1 - 4 + rand(0,10);
            $y2 = $y1 - 4 + rand(0,10);
            $color = $colors[rand(0,count($colors)-1)];
            imageline($im,$x1,$y1,$x2,$y2,$color);
        }
    }


}

$obj = new VerificationCode();
$obj->create();

相关文章

  • JavaWeb登录验证码生成和检验

    生成验证码类 } 登录类: }

  • 验证码实现

    一、springboot实现,用于测试工具类是否可用 1、先写一个生成验证码的工具类,用来生成验证码 2、然后写一...

  • 生成随机验证码

    基础类方法:生成随机验证码

  • 验证码类

    验证码类 captcha.class.php 生成验证码图片,验证码存入session imagecode.php...

  • 自定义标签JSTL标签库

    生成图片(VerfiyCode类) 登录功能之添加验证码

  • java实现图片验证码

    从java后台实现图片验证码的生成以及前端展示 step1:创建一个生成验证码的工具类 ps:简书粘贴代码进来太难...

  • 验证码

    登录页面 生成验证码的servlet类 CheckcodeServlet的xml配置

  • 验证码校验功能实现----Session

    要实现页面验证码的校验,首先我们要先生成验证码我们需要先准备一些东西1)验证码生成的java类文件以及字段.txt...

  • java——图形验证码

    文件结构 1.创建一个存储验证码信息的类,用于校验,这里不做校验,这个类意义不大 2.创建图形验证码的生成器 3....

  • java生成图形验证码

    1.需求提供一个接口,请求接口,返回一个图形验证码 2.Controller接口 3.随机生成验证码的工具类 4....

网友评论

      本文标题:一个验证码生成类

      本文链接:https://www.haomeiwen.com/subject/vadzfctx.html