一個php驗證碼生成類代碼

xm52 9年前發布 | 857 次閱讀 PHP

<?php
   class ValidationCode
   {
       //屬性
       private $width;
       private $height;
       private $codeNum;
       private  $image;
       private $disturbColorNum;  //干擾元素數目
       private  $checkCode;
       function __construct($width=80,$height=20,$codeNum=4)
           {
           $this->width=$width;
           $this->height=$height;
           $this->codeNum=$codeNum;
           $number=floor($width$height/15);
           if($number>240-$codeNum)
             {
               $this->disturbColorNum=240-$codeNum;
              }else
               {
                  $this->disturbColorNum=$number;
               }
               $this->checkCode=$this->createCheckcode();
       }
       function getCheckCode()
       {
           return $this->checkCode;
       }
       private function createImage(){
          $this->image=imagecreatetruecolor($this->width,$this->height);
          $backcolor=imagecolorallocate($this->image,rand(225,255),rand(225,255),rand(255,255));
          imagefill($this->image,0,0,$backcolor);
          $border=imagecolorallocate($this->image,0,0,0);
          imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$border);
       }
       private function setDisturbColor(){
           for($i=0;$i<$this->disturbColorNum;$i++){
               $color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
              imagesetpixel($this->image,rand(1,$this->width-2),rand(1,$this->height-2),$color);
           }
           for($i=0;$i<10;$i++)
           {
                  $color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
                  imagearc($this->image,rand(-10,$this->width),rand(-10,$this->height),rand(30,300),rand(20,300),55,44,$color);
           }
       }
      private function outputText($fontFace=""){
          for($i=0;$i<$this->codeNum;$i++)
          {
              $fontcolor=imagecolorallocate($this->image,rand(0,128),rand(0,128),rand(0,128));
             if($fontFace=="")
            {
              $fontsize=rand(3,5);
              $x=floor($this->width/$this->codeNum)$i+5;
              $y=rand(0,$this->height-15);
              imagechar($this->image,$fontsize,$x,$y,$this->checkCode{$i},$fontcolor);
             }
             else
            {
                 $fontsize=rand(12,16);
                 $x=floor(($this->width-8)/$this->codeNum)*$i+8;
                 $y=rand($fontsize,$this->height-8);
                 imagettftext($this->image,$fontsize,rand(-45,45),$x,$y,$fontcolor,$fontFace,$this->checkCode{$i});
             }
          }
      }

  private function createCheckCode(){
      $code="23456789abcdefghijkmnpqrstuvwrst";
      $str="";
      for($i=0;$i<$this->codeNum;$i++)
      {
          $char=$code{rand(0,strlen($code)-1)};
          $str.=$char;
      }
      return $str;
  }
  private function outputImage()
   {
      if(imagetypes()&IMG_GIF)
       {
         header("Content-Type:image/gif");
          imagepng($this->image);
       }else if(imagetypes()&IMG_JPG)
       {
              header("Content-Type:image/jpeg");
                imagepng($this->image);
       }else if(imagetypes()&IMG_PNG)
       {
              header("Content-Type:image/png");
              imagepng($this->image);
       }else if(imagetypes()&IMG_WBMP){
             header("Content-Type:image/vnd.wap.wbmp");
             imagepng($this->image);
       }else
       {
           die("PHP不支持圖片驗證碼");
       }
   }
       //通過該方法向瀏覽器輸出圖像
   function  showImage($fontFace="")
   {
       //創建圖像背景
        $this->createImage();
       //設置干擾元素
       $this->setDisturbColor();
       //向圖像中隨機畫出文本
       $this->outputText($fontFace);
       //輸出圖像
       $this->outputImage();
   }

   function __destruct()
   {
       imagedestroy($this->image);
   }

} function checklogin(){ if(empty($_POST['name'])) die( '用戶名不能為空'); if(empty($_POST['password'])) die("密碼不能為空"); if($_SESSION['code']!=$_POST['vertify']) die("驗證碼輸入不正確".$_SESSION['code']);

   $username=$_POST['name'];
   $password=md5($_POST['password']);
   //檢查是否存在
     conndb($username,$password);

} function conndb($name="",$ps=""){ $conn=mysql_connect('localhost','root','123456'); if(!$conn) die("數據庫連接失敗".mysql_error()); mysql_select_db('5kan',$conn) or die('選擇數據庫失敗'.mysql_error()); mysql_set_charset('utf8',$conn); $sql="select id from k_user where username='{$name}' and password='{$ps}'"; $result=mysql_query($sql) or die("SQL語句錯誤".mysql_error()); if(mysql_num_rows($result)>0) die("登錄成功"); else die("用戶名或者密碼錯誤"); mysql_close($conn); } session_start(); if(!isset($_POST['randnum'])) { $code=new ValidationCode(120,20,4); $code->showImage("comicbd.ttf"); //顯示在頁面 $_SESSION['code']=$code->getCheckCode();//保存在服務器中 } else { checklogin(); }

?></pre>

 本文由用戶 xm52 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!