PHP實現驗證碼製作

來源:互聯網
上載者:User

標籤:php   驗證碼   

captcha.php(PHP產生驗證碼並儲存Session):

<?php//開啟Sessionsession_start();//繪製底圖$image = imagecreatetruecolor(100, 30);//返回資源型的值$bgcolor = imagecolorallocate($image, 255, 255, 255);//建立一個底圖imagefill($image, 0, 0, $bgcolor);//地區填充/*//輸出隨機數字for($i = 0; $i < 4; $i++){$fontsize = 6;//字型大小$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));//字型顏色$fontcontent = rand(0, 9);//字串內容$x = ($i*100/4) + rand(5, 10);//數位橫座標$y = rand(5, 10);//數位縱座標imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);//在映像資源上繪製字元}*///產生隨機字串$captch_code = ‘‘;for($i = 0; $i < 4; $i++){$fontsize = 6;//字型大小$fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120),rand(0, 120));//字型顏色$data = ‘23456789ABCDEFGHJKLMNOPQRTUVWXYZabcdefghjkmnopqrtuvwxy‘;//隨機字串的字典$fontcontent = substr($data, rand(0, strlen($data)), 1);//字元$captch_code .= $fontcontent;//拼接字串$x = ($i*100/4) + rand(5, 10);//字元橫座標$y = rand(5, 10);//字元縱座標//在映像資源上繪製字元imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);}//將驗證碼字串儲存在Session$_SESSION[‘authcode‘] = $captch_code;//點幹擾for($i = 0; $i < 200; $i++){$pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));imagesetpixel($image, rand(1, 99), rand(1, 99), $pointcolor);}//線幹擾for($i = 0; $i < 6; $i++){$linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));imageline($image, rand(1, 99), rand(1, 99), rand(1, 99), rand(1, 99), $linecolor);}//輸出圖片內容header(‘content-type:image/png‘);//輸出內容的格式imagepng($image);//輸出內容imagedestroy($image);//銷毀資源?>



captcha-form.html(Web表單驗證):

<!DOCTYPE html><html><head>  <meta charset="utf-8">  <title>驗證碼</title></head><body>  <form method="post" action="./captcha-result.php">    <p>  驗證碼圖片:  <img id="captcha-img" border="1" src="./captcha.php?r=0">  <a href="javascript:void(0);"  id="authcode" type="text" name="authcode" value=""></p><p><input type="submit" value="提交" style="padding:6px 20px;"></p>    </form>  <script>    //動態擷取驗證碼    function getCaptchaImg(){//從伺服器擷取新的驗證碼document.getElementById(‘captcha-img‘).src=‘./captcha.php?r=‘+Math.random();//清空文字框裡已輸入的內容document.getElementById(‘authcode‘).value="";}  </script></body></html>

650) this.width=650;" src="https://s3.51cto.com/wyfs02/M02/9E/49/wKiom1mNeibAUICwAAAhFkY4fUs684.png" title="20170811173319.png" alt="wKiom1mNeibAUICwAAAhFkY4fUs684.png" />



captcha-result.php(PHP判斷驗證碼是否正確):

<?php//驗證驗證碼是否正確if(isset($_REQUEST[‘authcode‘])){//開啟Sessionsession_start();//strtolower()將字串都轉換成小寫,將驗證碼設定為不區分大小寫型if(strtolower($_REQUEST[‘authcode‘]) == strtolower($_SESSION[‘authcode‘])){echo "輸入正確";}else{echo "輸入錯誤";}exit();}?>



所用到的函數原型:

<?php//imagecreatetruecolor() 返回一個映像標識符,代表了一幅大小為 x_size 和 y_size 的黑色映像。resource imagecreatetruecolor ( int $width , int $height );//imagecolorallocate() 返回一個標識符,代表了由給定的 RGB 成分組成的顏色。red,green 和 blue 分別是所需要的顏色的紅,綠,藍成分。int imagecolorallocate ( resource $image , int $red , int $green , int $blue );//imagefill() 在 image 映像的座標 x,y(映像左上方為 0, 0)處用 color 顏色執列區域填充(即與 x, y 點顏色相同且相鄰的點都會被填充)。bool imagefill ( resource $image , int $x , int $y , int $color );//imagestring() 用 col 顏色將字串 s 畫到 image 所代表的映像的 x,y 座標處(這是字串左上方座標,整幅映像的左上方為 0,0)。如果 font 是 1,2,3,4 或 5,則使用內建字型。bool imagestring ( resource $image , int $font , int $x , int $y , string $s , int $col );//imagesetpixel() 在 image 映像中用 color 顏色在 x,y 座標(映像左上方為 0,0)上畫一個點。bool imagesetpixel ( resource $image , int $x , int $y , int $color );//imageline() 用 color 顏色在映像 image 中從座標 x1,y1 到 x2,y2(映像左上方為 0, 0)畫一條線段。bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color );//imagepng() 將 GD 映像流(image)以 PNG 格式輸出到標準輸出(通常為瀏覽器),或者如果用 filename 給出了檔案名稱則將其輸出到該檔案。bool imagepng ( resource $image [, string $filename ] );//imagedestroy() 釋放與 image 關聯的記憶體。image 是由映像建立函數返回的映像標識符,例如 imagecreatetruecolor()。bool imagedestroy ( resource $image );?>




本文出自 “佟鑫的部落格” 部落格,請務必保留此出處http://tong707.blog.51cto.com/12527988/1955527

PHP實現驗證碼製作

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.