国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > PHP > 正文

全面解析PHP驗(yàn)證碼的實(shí)現(xiàn)原理 附php驗(yàn)證碼小案例

2020-03-22 18:02:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
然后在瀏覽器上Ctrl+F查找gd選項(xiàng)即可驗(yàn)證自己有沒(méi)有裝這個(gè)拓展,如果沒(méi)有的話,還需要自己全裝一下這個(gè)拓展。 背景圖 imagecreatetruecolor 默認(rèn)生成黑色背景 // 使用gd的imagecreatetruecolor();創(chuàng)建一張背景圖 $image = imagecreatetruecolor(100,30); // 在顯示這張圖片的時(shí)候一定要先聲明頭信息 header('content-type:image/png'); imagepng($image); // 釋放資源,銷毀執(zhí)行對(duì)象 imagedestroy($image); imagecolorallocate 創(chuàng)建一個(gè)填充色,并用imagefill(image,x,y,color)方法來(lái)附著。 // 使用gd的imagecreatetruecolor();創(chuàng)建一張背景圖 $image = imagecreatetruecolor(100,30); // 生成填充色 $bgcolor = imagecolorallocate($image,255,255,255); // 將填充色填充到背景圖上 imagefill($image,0,0,$bgcolor); // 在顯示這張圖片的時(shí)候一定要先聲明頭信息 header('content-type:image/png'); imagepng($image); // 釋放資源,銷毀執(zhí)行對(duì)象 imagedestroy($image); imagepng 在使用這個(gè)方法之前,一定要先設(shè)置頭信息,否則不會(huì)正常的顯示圖片
imagedestory(image) 適時(shí)的釋放資源會(huì)減輕對(duì)服務(wù)器請(qǐng)求的壓力。
簡(jiǎn)易數(shù)字驗(yàn)證碼 imagecolorallocate 生成顏色信息,方便待會(huì)的賦予處理。 $fontcolor=imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255)); imagestring 把內(nèi)容信息寫到圖片的相應(yīng)位置上。 imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); 增加識(shí)別干擾 //增加點(diǎn) // 生成一些干擾的點(diǎn),這里是200個(gè) for($i=0;$i $i++){ $pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor); // 增加線 // 生成一些干擾線 這里是5個(gè) for($i=0;$i $i++){ // 設(shè)置為淺色的線,防止喧賓奪主 $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor); 數(shù)字字母混合驗(yàn)證碼 // 使用gd的imagecreatetruecolor();創(chuàng)建一張背景圖 $image = imagecreatetruecolor(100,40); // 生成填充色 $bgcolor = imagecolorallocate($image,255,255,255); // 將填充色填充到背景圖上 imagefill($image,0,0,$bgcolor); //////// 生成隨機(jī)4位字母以及數(shù)字混合的驗(yàn)證碼 for($i=0;$i $i++){ $fontsize = rand(6,8); $fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255)); // 為了避免用戶難于辨認(rèn),去掉了某些有歧義的字母和數(shù)字 $rawstr = 'abcdefghjkmnopqrstuvwxyz23456789ABCDEFGHJKLMNOPQRSTUVWXYZ'; $fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1); // 避免生成的圖片重疊 $x += 20; $y = rand(10,20); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); // 生成一些干擾的點(diǎn),這里是200個(gè) for($i=0;$i $i++){ $pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor); // 生成一些干擾線 這里是4個(gè) for($i=0;$i $i++){ // 設(shè)置為淺色的線,防止喧賓奪主 $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
驗(yàn)證的原理 驗(yàn)證的過(guò)程就是客戶端輸入的驗(yàn)證碼和存在于session域中的驗(yàn)證碼進(jìn)行對(duì)比。即: if(isset($_REQUEST['checkcode'])){ session_start(); if($_REQUEST['checkcode']==$_SESSION['checkcode']){ echo " font color='green' Success! /font }else{ echo " font color='red' Failed! /font exit(); 優(yōu)化驗(yàn)證 但是簡(jiǎn)單的這樣驗(yàn)證有一點(diǎn)不好的地方,那就是字母的大小寫容易出錯(cuò)。所以我們要做一下轉(zhuǎn)換,將用戶輸入的數(shù)值全部變成小寫的。 if(strtolower($_REQUEST['checkcode'])==$_SESSION['checkcode']){···}
小案例 生成驗(yàn)證碼 session_start();// 必須在php的最開始部分聲明,來(lái)開啟session
$fontsize = rand(6,8); $fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255)); // 為了避免用戶難于辨認(rèn),去掉了某些有歧義的字母和數(shù)字 $rawstr = 'abcdefghjkmnopqrstuvwxyz23456789'; $fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1); // 拼接即將誕生的驗(yàn)證碼 $checkcode.=$fontcontent; // 避免生成的圖片重疊 $x += 20; $y = rand(10,20); imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); // 保存到session變量中 $_SESSION['checkcode']=$checkcode; // 生成一些干擾的點(diǎn),這里是200個(gè) for($i=0;$i $i++){ $pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor); // 生成一些干擾線 這里是4個(gè) for($i=0;$i $i++){ // 設(shè)置為淺色的線,防止喧賓奪主 $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255)); imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);
if(strtolower($_REQUEST['checkcode'])==$_SESSION['checkcode']){ echo " font color='green' Success! /font }else{ echo " font color='red' Failed! /font exit(); !DOCTYPE html html head meta charset="utf-8" / title 驗(yàn)證驗(yàn)證碼信息 /title script function change(){ document.getElementById("image_checkcode").src='./store.php r='+Math.random(); /script /head body form action="./form.php" method="post" p 驗(yàn)證碼圖片: /p img id="image_checkcode" src="./store.php r= php echo rand(); " / a href="javascript:void(0)" 看不清楚 /a br/ 請(qǐng)輸入驗(yàn)證碼 input type="text" name="checkcode" / br / p input type="submit" value="提交" / /p
使用php制作驗(yàn)證碼需要gd拓展的支持。
使用imagecreatetruecolor方法生成背景色,并用imagefill填充一個(gè)由imagecolorallocate產(chǎn)生的顏色。
使用imagestring來(lái)實(shí)現(xiàn)驗(yàn)證碼和背景圖的結(jié)合
使用imagesetpixel來(lái)添加干擾點(diǎn)
使用imageline來(lái)添加干擾線
使用session之前要在開頭開啟session_start()方法
使用JavaScript來(lái)動(dòng)態(tài)的修改驗(yàn)證碼的src,來(lái)滿足用戶“換一張”的需求。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持phpstudy。
PHP教程

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 镇巴县| 同江市| 顺昌县| 萍乡市| 永福县| 枣庄市| 信丰县| 正蓝旗| 比如县| 东山县| 饶阳县| 铁岭县| 南部县| 温宿县| 元氏县| 灌阳县| 长丰县| 兴化市| 汪清县| 阿拉尔市| 布尔津县| 昌黎县| 织金县| 峡江县| 迭部县| 枝江市| 漠河县| 米泉市| 镇平县| 鹤峰县| 犍为县| 习水县| 宝鸡市| 连南| 皮山县| 武定县| 遵义县| 大同市| 萨迦县| 科技| 溆浦县|