【前端开发】laravel框架:验证码控制器

<?php

namespace App\Http\Controllers\CheckCode;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class CodeController extends BaseController
{
    public function code(){
		//创建Vcode类对象
		$vcode=new Vcode();
		//调用类方法
		$vcode->doimg();
	}
}

class Vcode{
	private $charset='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'; 	//随机因子
	private $code; //验证码
	private $codelen=4;	//验证码长度
	private $width=130; //宽度
	private $height=50; //高度
	private $img; //图形资源句柄
	private $font; //指定的字体
	private $fontsize=20; //指定字体大小
	private $fontcolor; //指定字体颜色
	
	//构造方法初始化
	public function __construct(){
		$this->font=dirname(__FILE__).'/Elephant.ttf';// 字体路径
	}
	
	//生成随机码
	private function createCode(){
		$_len=strlen($this->charset)-1;
		for($i=0;$i<$this->codelen;$i++){
			$this->code.=$this->charset[mt_rand(0,$_len)];
		}
	}
		
	//生成背景
	private function creatBg(){
		$this->img=imagecreatetruecolor($this->width,$this->height);
		$color=imagecolorallocate($this->img,mt_rand(157,255),mt_rand(157,255),mt_rand(157,255));
		imagefilledrectangle($this->img,0,$this->height,$this->width,0,$color);
	}
	
	//生成文字
	private function creatFont(){
		$_x=$this->width / $this->codelen;
		for($i=0;$i<$this->codelen;$i++){
			$this->fontcolor=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
			imagettftext($this->img,$this->fontsize,mt_rand(-30,30),$_x*$i+mt_rand(1,5),$this->height/1.4,$this->fontcolor,$this->font,$this->code[$i]);
		}
	}
	
	//生成线条、雪花
	private function creatLine(){
		//线条
		for($i=0;$i<6;$i++){
			$color=imagecolorallocate($this->img,mt_rand(0,156),mt_rand(0,156),mt_rand(0,156));
			imageline($this->img,mt_rand(0,$this->width),mt_rand(0,$this->height),mt_rand(0,$this->width),mt_rand(0,$this->height),$color);
		}
		//雪花
		for($i=0;$i<100;$i++){
			$color=imagecolorallocate($this->img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255));
			imagestring($this->img,mt_rand(1,5),mt_rand(0,$this->width),mt_rand(0,$this->height),'*',$color);
		}
	}
	
	//输出
	private function output(){
		header('Content-type:image/png');
		// 清空缓冲区
		ob_clean();
		imagepng($this->img);
		imagedestroy($this->img);
	}
	
	//对外生成
	public function doimg(){
		$this->creatBg();
		$this->createCode();
		$this->creatLine();
		$this->creatFont();
		$this->output();
		$_SESSION['Code']=$this->code;
	}
	
	//获取验证码
	public function getcode(){
		return strtoupper($this->code);
	}
	
	//返回验证码
	public function get(){
		return $_SESSION['Code'];
	}
}
?>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值