PHP登录带图片,PHP登录注册完整图片验证码实现
通過(guò)上一篇 PHP gd簡(jiǎn)單畫(huà)圖學(xué)習(xí)后。這篇將繼續(xù)探索實(shí)現(xiàn)PHP圖片驗(yàn)證碼的實(shí)現(xiàn)。效果圖如下
為什么需要驗(yàn)證碼?
驗(yàn)證碼設(shè)計(jì)。驗(yàn)證碼一使用于用戶(hù)注冊(cè)和登錄。主要是防止機(jī)器批量注冊(cè)用戶(hù)或機(jī)器頻繁測(cè)試登錄
此處的核心點(diǎn)有兩個(gè)。第一是圖片驗(yàn)證碼實(shí)現(xiàn)。第二是如果在驗(yàn)證頁(yè)面檢驗(yàn)輸入的驗(yàn)證碼是否正確
首先我們先實(shí)現(xiàn)驗(yàn)證碼
新建一個(gè)cfv(Verification Code).php文件,為單獨(dú)生成驗(yàn)證碼文件
創(chuàng)建一個(gè)150*40px的畫(huà)布,以及設(shè)置需要的顏色等:
$img = imagecreatetruecolor(150,40);
$white = imagecolorallocate($img,240,241,218);
$gray = imagecolorallocate($img,100,233,12);
$orange = imagecolorallocate($img,168,170,19);
imagefill($img,0,0,$white);//填充畫(huà)布
合并一個(gè)從0-9,a-z,A-Z數(shù)組,$arr = array_merge(range(0,9),range(a,z),range(A,Z));
打亂數(shù)組 shuffle($arr);
從數(shù)組里面取出4個(gè),并且以" "空格連接,組成驗(yàn)證碼需要的字符串 $str = join(" ",array_slice($arr,0,4));
畫(huà)驗(yàn)證碼文字到畫(huà)布上 imagettftext($img,20,0,10,30,$gray,"my.TTF",$str);
imagettftext (resource$image ,float$size ,float$angle ,int$x ,int$y ,int$color ,string$fontfile ,???string$text ) $image:畫(huà)布 $size:字體大小 $angle:字體偏轉(zhuǎn)角度 $x:字體左下x坐標(biāo) $y:字體左下y坐標(biāo) $color 字體顏色 $fontfile()在C:\Windows\Fonts下任意取一個(gè).TTF文件$text 驗(yàn)證碼文字
為了防止機(jī)器頻繁測(cè)試。所以得增加干擾線(xiàn) 。如下增加了30條干擾線(xiàn)
for ($i=0; $i <30 ; $i++) {
imagearc($img, mt_rand(0,150), mt_rand(0,40), mt_rand(0,30), mt_rand(0,30), mt_rand(0,360), ? ? ?? ???????????????? mt_rand(0,360), $orange);}
最后畫(huà)出該驗(yàn)證碼圖像,并且釋放資源?? imagejpeg($img);imagedestroy($img);
創(chuàng)建表單,這兒隨便創(chuàng)建了一個(gè)表單。代碼直接上圖
最后是驗(yàn)證提交的表單驗(yàn)證碼信息是否正確
由于我們驗(yàn)證的php和驗(yàn)證碼的php文件不同,所以改怎么在驗(yàn)證碼圖片中獲取文字作比較?此處停留思考1分鐘^-^
這時(shí)候我們需要借助Session,關(guān)于Session詳細(xì)運(yùn)用,這兒不做深究。只略講一下這兒的Session運(yùn)用
開(kāi)啟Session session_start();需要在驗(yàn)證碼最上面開(kāi)啟。注意這句代碼前不能有輸出比如echo......
把驗(yàn)證碼字符串存入Session? $_SESSION['vcode']=$str;
在驗(yàn)證的php文件中取出Session $scode = $_SESSION['vcode']
checkrgis.php 里面需要拿到表單傳入的驗(yàn)證碼,在和Session的驗(yàn)證碼做比較。這樣即可驗(yàn)證。代碼如下
session_start();
$scode = $_SESSION['vcode'];
$pvfc = $_POST['vfc'];
$code = strtolower(str_replace(" ","",$scode));
$fvc = strtolower(str_replace(" ","",$pvfc));
注意:獲得的用戶(hù)輸入的驗(yàn)證碼和Session的驗(yàn)證碼都需要把空格全部消除,在轉(zhuǎn)小寫(xiě)后比較。對(duì)應(yīng)上面4,5句代碼
源碼下載地址https://pan.baidu.com/s/1k4xn8zdLC9yKvFEGUryN4g? 提取碼?st8f
總結(jié)
以上是生活随笔為你收集整理的PHP登录带图片,PHP登录注册完整图片验证码实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: php sprintf %1,PHP s
- 下一篇: php怎么统计数量,怎样做PHP人数在线