Laravel 下生成验证码的类

<?php
 
namespace App\Tool\Validate;
 
//验证码类
class ValidateCode {
     private $charset = 'abcdefghkmnprstuvwxyzABCDEFGHKMNPRSTUVWXYZ23456789' ; //随机因子
     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 = public_path() . '/fonts/Elephant.ttf' ; //注意字体路径要写对,否则显示不了图片
         $this ->createCode();
     }
     //生成随机码
     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 createBg()
     {
         $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 createFont()
     {
         $_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 createLine()
     {
         //线条
         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' );
         imagepng( $this ->img);
         imagedestroy( $this ->img);
     }
     //对外生成
     public function doimg()
     {
         $this ->createBg();
         $this ->createLine();
         $this ->createFont();
         $this ->outPut();
     }
     //获取验证码
     public function getCode()
     {
         return strtolower ( $this ->code);
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值