PHP編寫登錄驗(yàn)證碼功能 附調(diào)用方法

字號:


    本文實(shí)例為大家分享了一個PHP寫的登錄驗(yàn)證碼功能,供大家參考,具體內(nèi)容如下
    ShowKey.php
    <?php
    session_start();
    //設(shè)置COOKIE或Session
    function esetcookie($name,$str,$life=0){
    //本函數(shù)將字符串 str 全部變小寫字符串使驗(yàn)證碼輸入不區(qū)分大小寫----在提交表單進(jìn)行session比較同樣需要次函數(shù)轉(zhuǎn)化
     $_SESSION[$name]=strtolower($str);
    }
    //獲取隨機(jī)字符 此函數(shù)區(qū)分字符大小寫 如果不區(qū)分大小寫可加入函數(shù)strtolower
    function domake_password($len) 
    { 
      $chars = array( 
        /*"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", 
        "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", 
        "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", 
        "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", 
        "S", "T", "U", "V", "W", "X", "Y", "Z",*/ "0", "1", "2", 
        "3", "4", "5", "6", "7", "8", "9"
      ); 
      $charsLen = count($chars) - 1; 
      shuffle($chars);// 將數(shù)組打亂
      $output = ""; 
      for ($i=0; $i<$len; $i++) 
      { 
        $output .= $chars[mt_rand(0, $charsLen)]; //獲得一個數(shù)組元素
      } 
      return $output;
    } 
    //顯示驗(yàn)證碼
    function ShowKey(){
     $key=domake_password(4);//獲取隨機(jī)值
     $set=esetcookie("checkkey",$key);//將隨機(jī)值寫入cookie或session
     //是否支持gd庫
     if(function_exists("imagejpeg")) 
     {
      header ("Content-type: image/jpeg");
      $img=imagecreate(47,20);
      $blue=imagecolorallocate($img,102,102,102);
      $white=ImageColorAllocate($img,255,255,255);
      $black=ImageColorAllocate($img,71,71,71);
      imagefill($img,0,0,$blue);
      imagestring($img,5,6,3,$key,$white);
      for($i=0;$i<90;$i++) //加入干擾象素
      {
       imagesetpixel($img,rand()%70,rand()%30,$black);
      }
      imagejpeg($img);
      imagedestroy($img);
     }
     elseif (function_exists("imagepng"))
     {
      header ("Content-type: image/png");
      $img=imagecreate(47,20);
      $blue=imagecolorallocate($img,102,102,102);
      $white=ImageColorAllocate($img,255,255,255);
      $black=ImageColorAllocate($img,71,71,71);
      imagefill($img,0,0,$blue);
      imagestring($img,5,6,3,$key,$white);
      for($i=0;$i<90;$i++) //加入干擾象素
      {
       imagesetpixel($img,rand()%70,rand()%30,$black);
      }
      imagepng($img);
      imagedestroy($img);
     }
     elseif (function_exists("imagegif")) 
     {
      header("Content-type: image/gif");
      $img=imagecreate(47,20);
      $blue=imagecolorallocate($img,102,102,102);
      $white=ImageColorAllocate($img,255,255,255);
      $black=ImageColorAllocate($img,71,71,71);
      imagefill($img,0,0,$blue);
      imagestring($img,5,6,3,$key,$white);
      for($i=0;$i<90;$i++) //加入干擾象素
      {
       imagesetpixel($img,rand()%70,rand()%30,$black);
      }
      imagegif($img);
      imagedestroy($img);
     }
     elseif (function_exists("imagewbmp")) 
     {
      header ("Content-type: image/vnd.wap.wbmp");
      $img=imagecreate(47,20);
      $blue=imagecolorallocate($img,102,102,102);
      $white=ImageColorAllocate($img,255,255,255);
      $black=ImageColorAllocate($img,71,71,71);
      imagefill($img,0,0,$blue);
      imagestring($img,5,6,3,$key,$white);
      for($i=0;$i<90;$i++) //加入干擾象素
      {
       imagesetpixel($img,rand()%70,rand()%30,$black);
      }
      imagewbmp($img);
      imagedestroy($img);
     }
     else
     {
      //不支持驗(yàn)證碼
      header("content-type:image/jpeg\r\n");
      header("Pragma:no-cache\r\n");
      header("Cache-Control:no-cache\r\n");
      header("Expires:0\r\n");
      $fp = fopen("data/vdcode.jpg","r"); 
     }
    }
    ShowKey();
    ?>
    調(diào)用方法:
    代碼如下:
    <img src="ShowKey.php" name="KeyImg" id="KeyImg"  onClick="KeyImg.src='ShowKey.php?'+Math.random()"> 
    以上就是本文的全部內(nèi)容,希望對大家學(xué)習(xí)php程序設(shè)計有所幫助。