PHP 实现图片验证码

PHP 实现图片验证码

步骤
  • 产生随机字符串

  • 创建一张简单的图片,设置背景色,文本色

  • 再加一些干扰线,干扰素

  • 输出图像

  • 销毁图像资源

    <?php
    
    //PHP生成图片验证码
    
    class VerifyImage{
    
      private $verifyCode;
      private $image;
    
      //生成随机字串
      private function createCode($type=1,$length=4){
          if ($type == 1) {
              $verifyCode = implode('', range(0, 9));
          }elseif ($type == 2) {
              $verifyCode = implode('', array_merge(range('a', 'z'),range('A', 'Z')));
          }else{
              $verifyCode = implode('', array_merge(range('a', 'z'),range(0, 9),range('A', 'Z')));
          }
    
          //判断生成字符是否符合要求
          if (strlen($verifyCode)<$length) {
              return false;
          }
          //打乱字符串
          $verifyCode = str_shuffle($verifyCode);
          return substr($verifyCode, 0,$length);
      }
      //生成图片,并加入干扰线,干扰素
      public function createImage($type=1,$length=4,$width = 80,$height = 40){
          $verifyCode = $this->createCode($type,$length);
          $image = imagecreatetruecolor($width, $height);
    
          //白色背景
          $white = imagecolorallocate($image, 255, 255, 255);
          //字体颜色
          $fontStyle = imagecolorallocate($image, rand(0, 255),rand(0, 255), rand(0, 255));;
          imagefill($image, 0, 0, $white);
          imagestring($image, 5, 10, 10, $verifyCode, $fontStyle);
          //加入干扰点
          for($i = 0; $i < 80; $i++) {  
              $color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));  
              imagesetpixel($image, rand(0, $width), rand(0,$height), $color);  
          }
          //干扰线  
          for($i = 0; $i < 5; $i++) {  
              $color = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));  
              imageline($image, rand(0, $width), rand(0, $height), rand(0, $width), rand(0, $height), $color);  
          } 
          //输出图片
          header("Content-type: image/png"); 
          imagepng($image);
          //释放资源
          imagedestroy($image);
      }
    }
    
    $im = new VerifyImage();;
    $im->createImage(3);
    
    ?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值