-
header("content-type:text/html;charset=utf-8");代表瀏覽器輸出文本類型查看全部
-
多看php官方文檔查看全部
-
底圖默認(rèn)為黑色查看全部
-
0-120區(qū)間為深色查看全部
-
對(duì)于資源型數(shù)據(jù)用完要銷毀,比如用gd庫創(chuàng)建的底圖查看全部
-
技術(shù)點(diǎn)、難點(diǎn)分析: 技術(shù)點(diǎn): 1)底圖的實(shí)現(xiàn),并且添加干擾元素:依賴PHP圖片處理庫GD,詳細(xì)查看:http://php.net/gd 2)生成驗(yàn)證內(nèi)容:簡(jiǎn)單的隨機(jī)數(shù)生成,使用PHP函數(shù)mt_rand();隨機(jī)數(shù)字+字幕生成,需要ASCⅡ碼理論基礎(chǔ); 隨機(jī)中文內(nèi)容生成,需要UTF-8編碼理論基礎(chǔ) 3)驗(yàn)證內(nèi)容保存在服務(wù)端:需要PHP操作SESSION基礎(chǔ) 4)驗(yàn)證內(nèi)容的校驗(yàn):需要前端Ajax基礎(chǔ)查看全部
-
步驟: 1.驗(yàn)證碼底圖 2.驗(yàn)證碼內(nèi)容:生成無規(guī)律內(nèi)容 3.生成驗(yàn)證碼 4.對(duì)比校驗(yàn)查看全部
-
session_start(); header('content-type:text/html;charset=utf-8'); // 定義字符集路徑 $fontface = "SIMYOU.TTF"; // 定義字符庫 $str = "中文字庫"; // 如果字符必須保證為 UTF-8 編碼格式, 如果不是,需要將其轉(zhuǎn)換UTF-8 編碼 // iconv ( string $in_charset , string $out_charset , string $str ) 將 $in_charset 編碼的 $str 字符串按要求的 $out_charset 字符編碼來轉(zhuǎn)換 并返回 // $str = iconv("GBK", "UTF-8", $text); // 將字符庫中的字符截取成數(shù)組 // str_split(string,length) 把字符串分割到數(shù)組中。string 要分割的字符串。length 每個(gè)數(shù)組元素的長(zhǎng)度。默認(rèn)是 1。 // 因?yàn)?utf-8 編碼的字符 是三個(gè)字節(jié)一個(gè)漢字,所以 length = 3. $strdb = str_split($str,3); for ($i=0; $i < 4; $i++) { // 0-120 為深色區(qū),能更好的在淺色背景中識(shí)別驗(yàn)證碼 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); $index = rand(0,count($strdb)-1); $cn = $strdb[$index]; $captch .=$cn; // imagettftext ( 畫布資源 , 字體大小 , 傾斜角度 , X軸位置 , Y軸位置 , 字體顏色 , 字符集路徑 , 文字內(nèi)容 ) 圖像寫入文本 imagettftext($image, rand(14,18), mt_rand(-60,60), (40*$i+20), mt_rand(30,35), $fontcolor, $fontface, $cn); } // 保存驗(yàn)證碼,并全部轉(zhuǎn)換在小寫 $_SESSION['authcode'] = strtolower($captch);查看全部
-
在form_xxx.php 中 或者將 php代碼 包含到 <body> 中,或者在 php代碼最前面加上 header('content-type:text/html;charset=utf-8'); 這樣瀏覽器才能正確處理 $_SESSION['authcode'] 和 $_REQUEST['authcode']中可能出現(xiàn)的漢字 captch_img.php 中的代碼: session_start(); //開啟 session 功能 $table = array( //制作 驗(yàn)證圖 驗(yàn)證碼 對(duì)照表 'pic0'=>'貓', 'pic1'=>'狗', 'pic2'=>'蛇', 'pic3'=>'馬' ); $index = rand(0,3); //生成隨機(jī)數(shù) $value = $table['pic'.$index]; //獲取對(duì)應(yīng)驗(yàn)證碼 $_SESSION['authcode'] = $value; //保存驗(yàn)證碼 $filename = dirname(__FILE__).'\\pic'.$index.'.jpg'; //獲取驗(yàn)證圖文件路徑 $contents = file_get_contents($filename); //獲取驗(yàn)證圖內(nèi)容 header('content-type:image/jpg'); //填寫報(bào)頭 echo $contents; //輸出驗(yàn)證圖查看全部
-
<form method="post" action="./form.php"> <p> 驗(yàn)證碼圖片: <!-- 這里在 src 中添加一個(gè)隨機(jī)數(shù),是為了在使用 "換一個(gè)" 功能時(shí),瀏覽器會(huì)以為 src 與之前的有所不同 而重新從服務(wù)器下載圖片,否則瀏覽器會(huì)直接調(diào)用緩存中的 圖片 或者甚至 不做任何動(dòng)作 --> <img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand();?>" width:100px; height:30px/> <a href="javascript:void(0)" onclick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">換一個(gè)</a> </p> <p>請(qǐng)輸入圖片中的內(nèi)容:<input type="text" name="authcode" value="" /></p> <p><input type="submit" value="提交" ></p> </form>查看全部
-
// 必須保證 session_start() 前,沒有任何向?yàn)g覽器的輸出(不能有 HTML 代碼,不能有 echo print var_dump 等等) // 要在 php 腳本中使用 $_SESSION ,腳本中必須包含 session_start() session_start(); // 用于保存生成的驗(yàn)證碼 $captch =""; for ($i=0; $i < 4; $i++) { $fontsize = 6; // 0-120 為深色區(qū),能更好的在淺色背景中識(shí)別驗(yàn)證碼 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); // 制作字典 并去除容易混淆的字符(l 與 1, z 與 2,等等) $data = 'abcdefghijkmnqprstuvwxy3456789ABCDEFGHIJKLMNQPRSTUVWXY'; // 通過截取字符串內(nèi)容方法,獲得隨機(jī)字符 $fontcontent = substr($data, rand(0,strlen($data)),1); $captch. = $fontcontent; // 生成的驗(yàn)證內(nèi)容不重疊 $x = ($i*100/4) + rand(5,10); // 生成的驗(yàn)證內(nèi)容不齊平 $y = rand(5,10); // 用 $fontcolor 顏色將字符串 $fontcontent 畫到 $image 所代表的圖像的 $x,$y 坐標(biāo)處 imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); } // 保存驗(yàn)證碼,并全部轉(zhuǎn)換在小寫 $_SESSION['authcode'] = strtolower($captch);查看全部
-
// 數(shù)字+字母驗(yàn)證碼 for ($i=0; $i < 4; $i++) { $fontsize = 6; // 0-120 為深色區(qū),能更好的在淺色背景中識(shí)別驗(yàn)證碼 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); // 制作字典 并去除容易混淆的字符(l 與 1, z 與 2,等等) $data = 'abcdefghijkmnqprstuvwxy3456789'; // 通過截取字符串內(nèi)容方法,獲得隨機(jī)字符 $fontcontent = substr($data, rand(0,strlen($data)),1); // 生成的驗(yàn)證內(nèi)容不重疊 $x = ($i*100/4) + rand(5,10); // 生成的驗(yàn)證內(nèi)容不齊平 $y = rand(5,10); // 用 $fontcolor 顏色將字符串 $fontcontent 畫到 $image 所代表的圖像的 $x,$y 坐標(biāo)處 imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); }查看全部
-
for ($i=0; $i < 3; $i++) { // 顏色設(shè)置為 80-220 ,是為了使 線 與 點(diǎn) 與 驗(yàn)證碼 更好的區(qū)分 $linecolor = imagecolorallocate($image, rand(80,220), rand(80,220), rand(80,220)); // imageline ( resource $image , int $x1 , int $y1 , int $x2 , int $y2 , int $color ) // imageline() 用 color 顏色在圖像 image 中從坐標(biāo) x1,y1 到 x2,y2 畫一條線段。 imageline($image, rand(1,99), rand(1,29), rand(1,99), rand(1,29), $linecolor) } PS: 干擾元素一定要控制好顏色,使之不影響用戶識(shí)別驗(yàn)證碼查看全部
-
for($i=0;$i<4;$i++){ $fontsize = 6; // 0-120 為深色區(qū),能更好的在淺色背景中識(shí)別驗(yàn)證碼 $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120)); $fontcontent = rand(0,9); // 生成的驗(yàn)證內(nèi)容不重疊 $x = ($i*100/4) + rand(5,10); // 生成的驗(yàn)證內(nèi)容不齊平 $y = rand(5,10); // 用 $fontcolor 顏色將字符串 $fontcontent 畫到 $image 所代表的圖像的 $x,$y 坐標(biāo)處 imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor); } for ($i=0; $i < 200; $i++) { // 50-200 為淺色區(qū),使用戶能更好的區(qū)分 干擾 與 驗(yàn)證碼 $pointcolor = imagecolorallocate($image, rand(50,200), rand(50,200), rand(50,200)); // 在 $image 圖像中用 $pointcolor 顏色在 $x,$y 坐標(biāo)上畫一個(gè)點(diǎn)。 imagesetpixel($image, rand(1,99), rand(1,29), $pointcolor); }查看全部
-
程序解析: 1.創(chuàng)建黑色畫布 $image = imagecreate(100, 30); 2.為畫布定義(背景)顏色 $bgcolor = imagecolorallocate($image, 255, 255, 255); 3.填充顏色 imagefill($image, 0, 0, $bgcolor); 4.向?yàn)g覽器輸出圖片頭信息 header('content-type:image/png'); 5.輸出圖片到瀏覽器 imagepng($image); 6.銷毀圖片 imagedestroy($image); 注意事項(xiàng): 1.依賴gd擴(kuò)展. 2.輸出圖片前必須提前輸出圖片的header信息. 3. imagecreatetruecolor( int $width, int $height ) 默認(rèn)輸出為黑色背景.查看全部
舉報(bào)
0/150
提交
取消