亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

PHP實現驗證碼制作

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

舉報

0/150
提交
取消
課程須知
本課程適合PHP初學者或者自學的童鞋們。
老師告訴你能學到什么?
1、如何拆解驗證碼項目 2、PHP的繪圖擴展GD庫的使用 3、如何用GD函數畫圖與驗證碼內容 4、如何用PHP做驗證碼校驗,及動態校驗 5、怎么實現中文、圖片、視頻驗證碼

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!