這篇文章要跟大家介紹的內容是關於php實現驗證碼的步驟以及服務端校驗的程式碼,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。
驗證碼是什麼:驗證碼是一種區分使用者是電腦還是人的公共程式
製作驗證碼需要四步驟
1:產生底圖
2:產生驗證內容
3:產生驗證碼內容
4:校驗驗證內容
先逐步,第一步,產生底圖:
目標:透過php產生一張100*30大小的圖片
方法:imagecreatetruecolor($width,$height);
#注意事項:依賴GD擴充功能
在輸出圖片前,必須提前輸出那張圖片的header 訊息--》》傳送原生http頭
該方法預設輸出黑色背景
imagecreatetruecolor() 新建一個真彩色圖像用$image來表示,之後,會大量用到
既然是創建真彩圖像,那就要有多樣的顏色,下面imagecolorallocate(選畫布,三色參數)
要用什麼意思填滿imagefill(選畫布,開始位置,顏色)
致此,產生了底圖,下面開始加點作料
$image = imagecreatetruecolor(100,30)
$bgcolor = imagecolorallocate($image,255,255,255);
imagefill($image,0,0,$bgcolor)
##第二步:產生驗證內容
目標:隨機產生數字(大小,開始位置,內容,顏色)方法:透過循環,imagestring 函數,水平的產生一行字符字串(根據imagestring裡面參數位置,往進填)注意事項:控制好字體大小,N/nfor($i=0;$<4;i ){ 這裡根據imagestring裡面的參數,定義變量,並且為變數賦值imagestring($image,$fontsze,$x,$y,$fontcontent,$fontcolor)}
$fontcontent = substr($data,rand(0,strlen($data)),1);
如果要數字和字母的組合,substr方法的意思是傳回字串的子字串,傳回的字串隨機取得data,從這開始,最多有1個長度第三步驟產生驗證碼內容#目標:為驗證碼增加干擾元素,幹擾元素為點或線方法:imagesetpixel點,imageline-線(資源文件,起始位置,顏色)注意事項:幹擾元素一定要控制好顏色和數量,避免喧賓奪主第四步:透過session儲存驗證訊息目標:在伺服器端做記錄,以便用戶輸入驗證碼後做校驗方法:session_start()注意事項:session_start()必須處於腳本最頂端多服務情況下,要考慮集中管理session管理#imagepng以png格式將圖片輸出到瀏覽器或檔案imagedestroy 銷毀圖片 好習慣在這些方法中,資源的使用非常多,就是每一個方法都要$image這個畫布<php? $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 = 'abcdefhijkimnpqrstuvwxy345678'; $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['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<3;$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),$pointcolor); } header('content-type: image/png'); imagepng( $image); //end; imagedestroy( $iamge); ?>
src="captcha-2.php?r=<?php echo rand();?>" 对于这个r 找了资料,没什么大用
<?php if(isset($_REQUEST['code'])) { session_start(); if (strtolower($_REQUEST['code'])==$_SESSION['code']) { header('Content-type: text/html; charset=UTF8'); echo '<h1 color="#0000CC">输入正确</h1>'; } else{ header('Content-type: text/html; charset=UTF8'); echo '<h1 color="#CC0000"><b>输入错误</b></h1>'; } exit(); } ?> <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>确认验证</title> </head> <body> <form method="post" action="form.php"> <p>验证码图片:<img border="1" src="captcha-2.php?r=<?php echo rand();?>" width="100" height="30"> </p> <p>请输入图片的内容:<input type="text" name="code" value=""/></p> <p><input type="submit" value="提交" style="padding:6px 20px;"></p> </form> </body> </html>
#如何用PHP將txt檔案內容轉換成陣列並按行數取得指定內容(範例)
以上是php實作驗證碼的步驟以及服務端校驗的程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!