亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

關于php制作動態隨機驗證碼的方法

2020-03-22 19:20:40
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了php制作動態隨機驗證碼的方法的相關資料,需要的朋友可以參考下

驗證碼(CAPTCHA)是“Completely Automated Public Turing test to tell Computers and Humans Apart”(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序??梢苑乐梗簮阂馄平饷艽a、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試,實際上用驗證碼是現在很多網站通行的方式,我們利用比較簡易的方式實現了這個功能。

這個問題可以由計算機生成并評判,但是必須只有人類才能解答。由于計算機無法解答CAPTCHA的問題,所以回答出問題的用戶就可以被認為是人類。

Php制作動態驗證碼是基于php的圖像處理,下面首先介紹一下php的圖像處理。

一.php圖像處理簡介

在PHP5中,動態圖象的處理要比以前容易得多。PHP5在php.ini文件中包含了GD擴展包,只需去掉GD擴展包的相應注釋就可以正常使用了。PHP5包含的GD庫正是升級的GD2庫,其中包含支持真彩圖像處理的一些有用的JPG功能。

一般生成的圖形,通過PHP的文檔格式存放,但可以通過HTML的圖片插入方式SRC來直接獲取動態圖形。比如,驗證碼、水印、微縮圖等。

創建圖像的一般流程:

1).設定標頭,告訴瀏覽器你要生成的MIME類型。

2).創建一個圖像區域,以后的操作都將基于此圖像區域。

3).在空白圖像區域繪制填充背景。

4).在背景上繪制圖形輪廓輸入文本。

5).輸出最終圖形。

6).清除所有資源。

7).其他頁面調用圖像。

第一步,設置文件MIME類型,輸出類型 將輸出類型改成圖像流

header( Content-Type: image/png; 

一般生成的圖像可以是png,jpeg,gif,wbmp

第二步,創建一個圖形區域,圖像背景

imagecreatetruecolor() 返回一個圖像標識符,代表了一幅大小為 x_size 和 y_size 的黑色圖像。語法:resource imagecreatetruecolor ( int $width , int $height )

$im = imagecreatetruecolor(200,200);

第三步,在空白圖像區域繪制填充背景

要有顏色填充器;imagecolorallocate -- 為一幅圖像分配顏色;語法:int imagecolorallocate ( resource $image , int $red , int $green , int $blue )

$blue = imagecolorallocate($im,0,102,255);

將這個blue顏色填充到背景上去;imagefill -- 區域填充;語法:bool imagefill ( resource $image , int $x , int $y , int $color )

imagefill($im,0,0,$blue);

第四步,在藍色的背景上輸入一些線條,文字等

顏色填充器

$white = imagecolorallocate($im,255,255,255);

畫兩條線段:imageline

imageline() 用 color 顏色在圖像 image 中從坐標 x1,y1 到 x2,y2(圖像左上角為 0, 0)畫一條線段。語法:bool imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color )

imageline($im,0,0,200,200,$white);imageline($im,200,0,0,200,$white);

水平地畫一行字符串:imagestring

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 )

imagestring($im,5,66,20, jingwhale ,$white);

第五步,輸出最終圖形

imagepng() 將 GD 圖像流(image)以 PNG 格式輸出到標準輸出(通常為瀏覽器),或者如果用 filename 給出了文件名則將其輸出到該文件。語法:bool imagepng ( resource $image [, string $filename ] )

imagepng($im);

第六步,我要將所有的資源全部清空

imagedestroy() 釋放與 image 關聯的內存。語法:bool imagedestroy ( resource $image )

imagedestroy($im);

其他頁面(html)調用創建的圖形

 img src= Demo4.php alt= PHP創建的圖片 / 

示例代碼如下:

 ?php //第一步,設置文件MIME類型 header( Content-Type: image/png;  //第二步,創建一個圖形區域,圖像背景 $im = imagecreatetruecolor(200,200); //第三步,在空白圖像區域繪制填充背景 $blue = imagecolorallocate($im,0,102,255);  imagefill($im,0,0,$blue); //第四步,在藍色的背景上輸入一些線條,文字等 $white = imagecolorallocate($im,255,255,255); imageline($im,0,0,200,200,$white); imageline($im,200,0,0,200,$white); imagestring($im,5,66,20, Jing.Whale ,$white); //第五步,輸出最終圖形 imagepng($im); //第六步,我要將所有的資源全部清空 imagedestroy($im); ? 

顯示效果:

二.創建動態驗證碼

1. 創建帶驗證碼的圖片,并模糊背景

隨機碼采用16進制;模糊背景即在圖片背景加上線條、雪花等。

1)創建隨機碼

for ($i=0;$i $_rnd_code;$i++) { $_nmsg .= dechex(mt_rand(0,15)); }

string dechex ( int $number ),返回一字符串,包含有給定 number 參數的十六進制表示。

2)保存在session

$_SESSION[ code ] = $_nms

3)創建圖片

//創建一張圖像$_img = imagecreatetruecolor($_width,$_height);$_white = imagecolorallocate($_img,255,255,255);imagefill($_img,0,0,$_white);if ($_flag) {//黑色,邊框 $_black = imagecolorallocate($_img,0,0,0); imagerectangle($_img,0,0,$_width-1,$_height-1,$_black);}

4)模糊背景

//隨機畫出6個線條for ($i=0;$i $i++) { $_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color);//隨機雪花for ($i=0;$i $i++) { $_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height), * ,$_rnd_color); }

5)輸出及銷毀

//輸出驗證碼for ($i=0;$i strlen($_SESSION[ code $i++) { $_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)); imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION[ code ][$i],$_rnd_color);//輸出圖像header( Content-Type: image/png imagepng($_img);imagedestroy($_img);

將其封裝在global.func.php全局函數庫中,函數名為_code(),以便調用。我們將設置$_width ,$_height ,$_rnd_code,$_flag 四個參數,以增強函數的靈活性。

* @param int $_width 驗證碼的長度:如果要6位長度推薦75+50;如果要8位,推薦75+50+50,依次類推
* @param int $_height 驗證碼的高度
* @param int $_rnd_code 驗證碼的位數
* @param bool $_flag 驗證碼是否需要邊框:true有邊框, false無邊框(默認)

封裝后的代碼如下:

 ?php  * [verification-code] (C)2015-2100 jingwhale. * This is a freeware * $Id: global.func.php 2015-02-05 20:53:56 jingwhale$ * _code()是驗證碼函數 * @access public * @param int $_width 驗證碼的長度:如果要6位長度推薦75+50;如果要8位,推薦75+50+50,依次類推 * @param int $_height 驗證碼的高度 * @param int $_rnd_code 驗證碼的位數 * @param bool $_flag 驗證碼是否需要邊框:true有邊框, false無邊框(默認) * @return void 這個函數執行后產生一個驗證碼function _code($_width = 75,$_height = 25,$_rnd_code = 4,$_flag = false) { //創建隨機碼 for ($i=0;$i $_rnd_code;$i++) { $_nmsg .= dechex(mt_rand(0,15)); //保存在session $_SESSION[ code ] = $_nmsg; //創建一張圖像 $_img = imagecreatetruecolor($_width,$_height); //白色 $_white = imagecolorallocate($_img,255,255,255); //填充 imagefill($_img,0,0,$_white); if ($_flag) { //黑色,邊框 $_black = imagecolorallocate($_img,0,0,0); imagerectangle($_img,0,0,$_width-1,$_height-1,$_black); //隨即畫出6個線條 for ($i=0;$i $i++) { $_rnd_color = imagecolorallocate($_img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255)); imageline($_img,mt_rand(0,$_width),mt_rand(0,$_height),mt_rand(0,$_width),mt_rand(0,$_height),$_rnd_color); //隨即雪花 for ($i=0;$i $i++) { $_rnd_color = imagecolorallocate($_img,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)); imagestring($_img,1,mt_rand(1,$_width),mt_rand(1,$_height), * ,$_rnd_color); //輸出驗證碼 for ($i=0;$i strlen($_SESSION[ code $i++) { $_rnd_color = imagecolorallocate($_img,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)); imagestring($_img,5,$i*$_width/$_rnd_code+mt_rand(1,10),mt_rand(1,$_height/2),$_SESSION[ code ][$i],$_rnd_color); //輸出圖像 header( Content-Type: image/png  imagepng($_img); //銷毀 imagedestroy($_img);? 

2.創建驗證機制

創建php驗證頁面,通過session來檢驗驗證碼是否一致。

1)創建verification-code.php驗證頁面

 ?php  * [verification-code] (C)2015-2100 jingwhale. * This is a freeware * $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$//設置字符集編碼header( Content-Type: text/html; charset=utf-8  !DOCTYPE html  html  head  meta charset= UTF-8  title verification code /title  link rel= stylesheet type= text/css href= style/basic.css /  /head  body  p id= testcode  form method= post name= verification action= verification-code.php?action=verification  dd 驗證碼: input type= text name= code >

顯示如下:

2)創建產生驗證碼圖片頁面

創建codeimg.php為verification-code.php html代碼里的img提供驗證碼圖片

首先必須在codeimg.php頁面開啟session;

其次,將我們封裝好的global.func.php全局函數庫引入進來;

最后,運行_code();

 ?php  * [verification-code] (C)2015-2100 jingwhale. * This is a freeware * $Id: codeimg.php 2015-02-05 20:53:56 jingwhale$//開啟sessionsession_start();//引入全局函數庫(自定義)require dirname(__FILE__). /includes/global.func.php //運行驗證碼函數。通過數據庫的_code方法,設置驗證碼的各種屬性,生成圖片_code(125,25,6,false);? 

3)創建session檢驗機制

首先必須在verification-code.php頁面也開啟session;

其次,設計提交驗證碼的方式,本文以get方式提交,當action=verification時提交成功;

最后,創建驗證函數,原理是將客戶端用戶提交的驗證碼同服務器codeimg.php中session的驗證碼是否一致;這里有一個js彈窗函數_alert_back(),我們也把它封裝在global.func.php里;

修改verification-code.php中php代碼如下:

 ?php  * [verification-code] (C)2015-2100 jingwhale. * This is a freeware * $Id: verification-code.php 2015-02-05 20:53:56 jingwhale$//設置字符集編碼header( Content-Type: text/html; charset=utf-8 //開啟sessionsession_start();//引入全局函數庫(自定義)require dirname(__FILE__). /includes/global.func.php //檢驗驗證碼if ($_GET[ action ] == verification ) { if (!($_POST[ code ] == $_SESSION[ code ])) { _alert_back( 驗證碼不正確!  }else{ _alert_back( 驗證碼通過!  !DOCTYPE html  html  head  meta charset= UTF-8  title verification code /title  link rel= stylesheet type= text/css href= style/basic.css /  script type= text/javascript src= js/codeimg.js /script  /head  body  p id= testcode  form method= post name= verification action= verification-code.php?action=verification  dd 驗證碼: input type= text name= code >

3.實現點擊驗證碼圖片更新驗證碼

上面若想實現驗證碼更新,必須刷新頁面;我們寫一個codeimg.js函數實現點擊驗證碼圖片更新驗證碼

window.onload = function () { var code = document.getElementById( codeimg //通過id找到html中img標簽 code.onclick = function () {//為標簽添加點擊事件 this.src= codeimg.php?tm= +Math.random();//修改時間,重新指向codeimg.php}

然后在verification-code.php html代碼head里 link 它即可。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

關于PHP中Closure類的使用方法

使用PHP如何編寫簡單的App接口

關于php購物網站支付paypal的使用方法

以上就是關于php制作動態隨機驗證碼的方法的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美亚洲午夜视频在线观看| 欧洲中文字幕国产精品| 久久久国产一区| 91免费国产视频| 久久伊人精品一区二区三区| 亚洲国产高潮在线观看| 精品久久久久久亚洲精品| 亚洲国产美女精品久久久久∴| 国产91精品在线播放| 91av视频在线免费观看| 国产精品夫妻激情| 欧美成人久久久| 午夜精品久久久久久久99黑人| 国产精品入口日韩视频大尺度| 97香蕉超级碰碰久久免费的优势| 日韩专区在线播放| 国产成人精品电影| 中文字幕精品av| 亚洲国产精品电影在线观看| 国产精品久久久久久超碰| 最近2019年中文视频免费在线观看| 一本色道久久88精品综合| 欧美日韩国产中字| 欧美亚洲日本黄色| 欧美极品少妇xxxxⅹ裸体艺术| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产精品美腿一区在线看| 久久99精品久久久久久青青91| 亚洲女在线观看| 欧美激情奇米色| 97精品国产97久久久久久免费| 亚洲mm色国产网站| 亚洲人成电影网站| 久久精品久久久久久| 国产高清在线不卡| 91精品国产综合久久久久久久久| 在线精品视频视频中文字幕| 91精品久久久久久久久久久久久久| 精品国产乱码久久久久酒店| 国产成人精品一区| 成人午夜在线视频一区| 精品国产精品三级精品av网址| 亚洲国产欧美一区二区三区同亚洲| 成人激情电影一区二区| 日韩欧美亚洲综合| 精品久久久久久久久国产字幕| 欧美成人久久久| 亚洲国产精品va在线看黑人| 久久久精品久久久久| 91精品国产综合久久香蕉最新版| 久久中文久久字幕| 国产精品久久999| 91国内揄拍国内精品对白| 欧美麻豆久久久久久中文| 成人国内精品久久久久一区| 国产精品久久久91| 国产成人福利视频| 中文字幕精品www乱入免费视频| 成人h片在线播放免费网站| 久久亚洲影音av资源网| 一区二区三区久久精品| 在线免费观看羞羞视频一区二区| 欧美裸体男粗大视频在线观看| 久久99精品久久久久久噜噜| 日韩av电影在线网| 日韩精品视频在线| 日韩欧美在线播放| 国产69精品久久久久9| 国产网站欧美日韩免费精品在线观看| 韩国三级日本三级少妇99| 91干在线观看| 日韩成人在线播放| 亚洲黄色av女优在线观看| 欧美激情国产高清| 午夜精品久久久99热福利| 成人春色激情网| 国产z一区二区三区| 欧美国产日韩中文字幕在线| 成人av番号网| 久久精品视频网站| 亚洲电影中文字幕| 久久久久久久久久久国产| 91免费人成网站在线观看18| 亚洲毛片一区二区| 欧美亚洲国产视频小说| 中文字幕久热精品在线视频| 俺去亚洲欧洲欧美日韩| 亚洲精选中文字幕| 成人福利网站在线观看11| 亚洲电影在线看| 色妞久久福利网| 2018日韩中文字幕| 亚洲午夜av久久乱码| 亚洲xxxx视频| 九九九久久久久久| 亚洲视频网站在线观看| 精品亚洲一区二区三区| 久久国产加勒比精品无码| 欧美激情第一页xxx| 亚洲欧洲午夜一线一品| 亚洲精品视频在线播放| 一区二区三区久久精品| 国产精品美女视频网站| 91老司机在线| 久久久精品影院| 日韩最新av在线| www亚洲欧美| 国产亚洲精品美女久久久久| 国产午夜精品全部视频在线播放| 亚洲人成在线电影| 国产精品极品在线| 日韩视频永久免费观看| 青青草精品毛片| 91久久精品日日躁夜夜躁国产| 欧洲精品毛片网站| 亚洲欧美日韩高清| 亚洲综合社区网| 91亚洲国产精品| 亚洲欧美精品一区| 国产视频精品免费播放| 亚洲美女www午夜| 成人网在线免费看| 疯狂做受xxxx欧美肥白少妇| 亚洲最大在线视频| 亚洲性69xxxbbb| 国产精品ⅴa在线观看h| 亚洲人成电影在线| 国产亚洲美女久久| 欧美亚洲国产成人精品| 欧美性猛交xxxx乱大交极品| 国产精品免费观看在线| 国产亚洲人成a一在线v站| 2019国产精品自在线拍国产不卡| 久久在线免费观看视频| 久久九九免费视频| 亚洲国产美女久久久久| 国产成人高清激情视频在线观看| 国产精品成av人在线视午夜片| 欧美中文在线字幕| 成人在线视频福利| 欧美成人性色生活仑片| 热re99久久精品国产66热| 久久中文字幕一区| 国产精品亚洲视频在线观看| 91免费的视频在线播放| 国产视频久久网| 亚洲欧美中文日韩v在线观看| 国产成人+综合亚洲+天堂| 日韩精品免费在线视频观看| 日本亚洲精品在线观看| 日韩视频在线观看免费| 黑人极品videos精品欧美裸| 亚洲天堂免费视频| 欧美成人在线影院| 久久久久久97| 91久久国产精品91久久性色| www.欧美视频| 国产精品观看在线亚洲人成网| 在线电影av不卡网址| 97久久精品国产| 精品少妇一区二区30p| 国产999精品视频| 日本欧美爱爱爱| 色先锋资源久久综合5566|