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

首頁 > 語言 > PHP > 正文

PHP生成帶背景的圖形驗證碼程序

2024-09-04 11:44:27
字體:
來源:轉載
供稿:網友

以前我們利用php生成的都是無背景或同一色彩背景的驗證碼了,但這種驗證容易給機器識別了,下面我來介紹一些生成帶背景的圖形驗證碼實例.

1、產生一張png的圖片,2、為圖片設置背景色,3、設置字體顏色和樣式,4、產生4位數的隨機的驗證碼,5、把產生的每個字符調整旋轉角度和位置畫到png圖片上,6、加入噪點和干擾線防止注冊機器分析原圖片來惡意注冊,7、輸出圖片,8、釋放圖片所占內存

authcode.php文件,代碼如下:

  1. <?php 
  2.         session_start (); 
  3.         header ( 'Content-type: image/png' ); 
  4.         //創建圖片 
  5.         $im = imagecreate($x=130,$y=45 ); 
  6.         $bg = imagecolorallocate($im,rand(50,200),rand(0,155),rand(0,155)); //第一次對 imagecolorallocate() 的調用會給基于調色板的圖像填充背景色 
  7.         $fontColor = imageColorAllocate ( $im, 255, 255, 255 );   //字體顏色 
  8.         $fontstyle = 'rock.ttf';                   //字體樣式,這個可以從c:windowsFonts文件夾下找到,我把它放到和authcode.php文件同一個目錄,這里可以替換其他的字體樣式 
  9.         //產生隨機字符 
  10.         for($i = 0; $i < 4; $i ++) { 
  11.                 $randAsciiNumArray         = array (rand(48,57),rand(65,90)); 
  12.                 $randAsciiNum                 = $randAsciiNumArray [rand ( 0, 1 )]; 
  13.                 $randStr                         = chr ( $randAsciiNum ); 
  14.                 imagettftext($im,30,rand(0,20)-rand(0,25),5+$i*30,rand(30,35),$fontColor,$fontstyle,$randStr); 
  15.                 $authcode                        .= $randStr;  
  16.         } 
  17.         $_SESSION['authcode']        = $randFourStr;//用戶和用戶輸入的驗證碼做比較 
  18.         //干擾線 
  19.         for ($i=0;$i<8;$i++){ 
  20.                 $lineColor        = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255)); 
  21.                 imageline ($im,rand(0,$x),0,rand(0,$x),$y,$lineColor); 
  22.         } 
  23.         //干擾點 
  24.         for ($i=0;$i<250;$i++){ 
  25.                 imagesetpixel($im,rand(0,$x),rand(0,$y),$fontColor); 
  26.         } 
  27.         imagepng($im); 
  28.         imagedestroy($im);                 
  29. ?> 

例2,新建一個PHP文件captcha_code_file.php,代碼如下:

  1. //首先開啟session  
  2. session_start();  
  3. //定義前臺顯示驗證碼長&寬  
  4. $image_width = 120;  
  5. $image_height = 40;  
  6. $characters_on_image = 6;  
  7. $font = './monofont.ttf';  
  8.    
  9. //The characters that can be used in the CAPTCHA code.  
  10. //avoid confusing characters (l 1 and i for example)  
  11. $possible_letters = '23456789bcdfghjkmnpqrstvwxyz';  
  12. $random_dots = 10;  
  13. $random_lines = 30;  
  14. $captcha_text_color="0x142864";  
  15. $captcha_noice_color = "0x142864";  
  16. //定義要生成驗證碼的字符串  
  17. $code = '';  
  18.    
  19. $i = 0;  
  20. while ($i < $characters_on_image) {   
  21. $code .= substr($possible_letters, mt_rand(0, strlen($possible_letters)-1), 1);  
  22. $i++;  
  23. }  
  24.    
  25. $font_size = $image_height * 0.75;  
  26. $image = @imagecreate($image_width$image_height);  
  27.    
  28. /* setting the background, text and noise colours here */ 
  29. $background_color = imagecolorallocate($image, 255, 255, 255);  
  30.    
  31. $arr_text_color = hexrgb($captcha_text_color);  
  32. $text_color = imagecolorallocate($image$arr_text_color['red'],   
  33.         $arr_text_color['green'], $arr_text_color['blue']);  
  34.    
  35. $arr_noice_color = hexrgb($captcha_noice_color);  
  36. $image_noise_color = imagecolorallocate($image$arr_noice_color['red'],   
  37.         $arr_noice_color['green'], $arr_noice_color['blue']);  
  38.    
  39. /* generating the dots randomly in background */ 
  40. for$i=0; $i<$random_dots$i++ ) {  
  41. imagefilledellipse($image, mt_rand(0,$image_width),  
  42.  mt_rand(0,$image_height), 2, 3, $image_noise_color);  
  43. }  
  44.    
  45. /* generating lines randomly in background of image */ 
  46. for$i=0; $i<$random_lines$i++ ) {  
  47. imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height),  
  48.  mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color);  
  49. }  
  50.    
  51. /* create a text box and add 6 letters code in it */ 
  52. $textbox = imagettfbbox($font_size, 0, $font$code);   
  53. $x = ($image_width - $textbox[4])/2;  
  54. $y = ($image_height - $textbox[5])/2;  
  55. imagettftext($image$font_size, 0, $x$y$text_color$font , $code);  
  56.    
  57. /* Show captcha image in the page html page */ 
  58. header('Content-Type: image/jpeg');// defining the image type to be shown in browser widow  
  59. imagejpeg($image);//showing the image  
  60. imagedestroy($image);//destroying the image instance  
  61. //設置session,做驗證  
  62. $_SESSION['6_letters_code'] = $code;  
  63.    
  64. function hexrgb ($hexstr)  
  65. {  
  66.   $int = hexdec($hexstr);  
  67.    
  68.   return array("red" => 0xFF & ($int >> 0x10),  
  69.                "green" => 0xFF & ($int >> 0x8),  
  70.                "blue" => 0xFF & $int);  

顯示驗證碼頁面index.php,實例代碼如下:

  1. <?php  
  2. session_start();  
  3. if(isset($_REQUEST['Submit'])){  
  4.     // code for check server side validation  
  5.     if(emptyempty($_SESSION['6_letters_code'] ) ||  
  6.         strcasecmp($_SESSION['6_letters_code'], $_POST['6_letters_code']) != 0)  
  7.     {    
  8.         $msg="您輸入的驗證碼有誤,請重新輸入!";  
  9.     }else{  
  10.         echo "您輸入的是正確的!";  
  11.         // Captcha verification is Correct. Final Code Execute here!  
  12.     }  
  13. }      
  14.  ?>  
  15.    
  16. <style type="text/css">  
  17. .table{  
  18.     font-family:Arial, Helvetica, sans-serif;  
  19.     font-size:12px;  
  20.     color:#333;  
  21.     background-color:#E4E4E4;      
  22. }  
  23. .table td{  
  24.     <a href="http://www.49028c.com">Coinstar Money point</a>  background-color:#F8F8F8;       
  25. }  
  26. </style>  
  27.    
  28. <form action="" method="post" name="form1" id="form1" >  
  29.   <table width="400" border="0" align="center" cellpadding="5" cellspacing="1">  
  30. <?php if(isset($msg)){?>  
  31.     <tr>  
  32.       <td colspan="2" align="center" valign="top"><?php echo $msg;?></td>  
  33.     </tr>  
  34. <?php } ?>   
  35.     <tr>  
  36.       <td align="right" valign="top"> 驗證碼Demo:</td>  
  37.       <td><img src="captcha_code_file.php?rand=<?php echo rand(0,20);?>" id='captchaimg'  onclick="refreshCaptcha();" ><br>  
  38.         <label for='message'>請輸入驗證碼:</label>  
  39.         <br>  
  40.         <input id="6_letters_code" name="6_letters_code" type="text">  
  41.         <br>  
  42.         如果看不到,請 <a href='javascript: refreshCaptcha();'>點我</a> 刷新一下!  
  43.         </p></td>  
  44.     </tr>  
  45.     <tr>  
  46.       <td>&amp;nbsp;</td>  
  47.       <td><input name="Submit" type="submit" onclick="return validate();" value="Submit"></td>  
  48.     </tr>  
  49.   </table>  
  50. </form>  
  51. <script type='text/javascript'>  
  52. //定義的刷新請求  
  53. function refreshCaptcha()  
  54. {  
  55.     var img = document.images['captchaimg'];  
  56.     img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;  
  57. //開源代碼Vevb.com 
  58. </script> 

例3,帶有雪花背景的驗證碼,代碼如下:

  1. <?session_start();?>  
  2. <FORM METHOD=POST ACTION="">  
  3. <input type=text name=number maxlength=4><img src="YanZhengMa.php?act=init">  
  4. <INPUT TYPE="submit" name="sub">  
  5. </FORM>  
  6. <?  
  7. //檢驗校驗碼  
  8. if(isset($HTTP_POST_VARS["sub"])):  
  9. if($HTTP_POST_VARS["number"] != $HTTP_SESSION_VARS[login_check_number] || emptyempty($HTTP_POST_VARS["number"])){  
  10.     echo "校驗碼不正確!" ;  
  11. }else{  
  12.     echo"驗證碼通過!";  
  13. }  
  14. endif;  
  15. show_source('test.php');  
  16. //以上本頁的源碼 
  17.  
  18.  
  19. //以下是生成驗證碼的源碼  
  20. show_source('YanZhengMa.php');  
  21. ?>  
  22. <?php  
  23. session_start();  
  24. session_register("login_check_number"); 
  25.  
  26.  
  27.  
  28. //昨晚看到了chianren上的驗證碼效果,就考慮了一下,用PHP的GD庫完成了類似功能  
  29. //先成生背景,再把生成的驗證碼放上去  
  30. $img_height=120;    //先定義圖片的長、寬  
  31. $img_width=40;  
  32. if($HTTP_GET_VARS["act"]== "init"){  
  33.     //srand(microtime() * 100000);//PHP420后,srand不是必須的  
  34.     for($Tmpa=0;$Tmpa<4;$Tmpa++){  
  35.         $nmsg.=dechex(rand(0,15));  
  36.     }//by sports98 
  37.  
  38.  
  39.     $HTTP_SESSION_VARS[login_check_number] = $nmsg
  40.  
  41.     //$HTTP_SESSION_VARS[login_check_number] = strval(mt_rand("1111","9999"));    //生成4位的隨機數,放入session中  
  42.     //誰能做下補充,可以同時生成字母和數字????----由sports98完成了 
  43.  
  44.  
  45.  
  46.     $aimg = imageCreate($img_height,$img_width);    //生成圖片  
  47.     ImageColorAllocate($aimg, 255,255,255);            //圖片底色,ImageColorAllocate第1次定義顏色PHP就認為是底色了  
  48.     $black = ImageColorAllocate($aimg, 0,0,0);        //定義需要的黑色 
  49.  
  50.  
  51.     ImageRectangle($aimg,0,0,$img_height-1,$img_width-1,$black);//先成一黑色的矩形把圖片包圍 
  52.  
  53.     //下面該生成雪花背景了,其實就是在圖片上生成一些符號  
  54.     for ($i=1; $i<=100; $i++) {    //先用100個做測試 
  55.  
  56.  
  57.         imageString($aimg,1,mt_rand(1,$img_height),mt_rand(1,$img_width),"*",imageColorAllocate($aimg,mt_rand(200,255),mt_rand(200,255),mt_rand(200,255)));  
  58.         //哈,看到了吧,其實也不是雪花,就是生成*號而已。為了使它們看起來"雜亂無章、5顏6色",就得在1個1個生成它們的時候,讓它們的位置、顏色,甚至大小都用隨機數,rand()或mt_rand都可以完成。  
  59.     } 
  60.  
  61.     //上面生成了背景,現在就該把已經生成的隨機數放上來了。道理和上面差不多,隨機數1個1個地放,同時讓他們的位置、大小、顏色都用成隨機數~~  
  62.     //為了區別于背景,這里的顏色不超過200,上面的不小于200  
  63.     for ($i=0;$i<strlen($HTTP_SESSION_VARS[login_check_number]);$i++){  
  64.         imageString($aimg, mt_rand(3,5),$i*$img_height/4+mt_rand(1,10),mt_rand(1,$img_width/2), $HTTP_SESSION_VARS[login_check_number][$i],imageColorAllocate($aimg,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200)));  
  65.     }  
  66.     Header("Content-type: image/png");    //告訴瀏覽器,下面的數據是圖片,而不要按文字顯示  
  67.     ImagePng($aimg);                    //生成png格式。。。嘿嘿效果蠻像回事的嘛。。。  
  68.     ImageDestroy($aimg);  
  69.  
  70. ?> 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品av在线| 亚洲综合中文字幕68页| 欧美激情一区二区三区久久久| 2020久久国产精品| 精品无人区太爽高潮在线播放| 8090成年在线看片午夜| 欧美理论电影在线播放| 精品国产福利在线| 不卡av电影在线观看| 亚洲人成网7777777国产| 国产精彩精品视频| 久久这里有精品视频| 日本精品免费观看| 国产精品一区二区久久精品| 欧美亚洲视频在线观看| 成人欧美一区二区三区在线| www.久久久久久.com| 在线视频日本亚洲性| 欧美日韩国产123| 97精品一区二区三区| 尤物99国产成人精品视频| 欧美日韩免费网站| 日韩一区av在线| 国产精品久久一区主播| 久久久久免费精品国产| 日韩精品久久久久久久玫瑰园| 国内外成人免费激情在线视频网站| 欧美一级大片在线免费观看| 亚洲欧洲一区二区三区久久| 日本欧美中文字幕| 成人国产精品久久久久久亚洲| 亚洲欧美日韩在线一区| 高清亚洲成在人网站天堂| 精品国产91久久久久久老师| 精品国产欧美一区二区三区成人| 色先锋久久影院av| 亚洲人成亚洲人成在线观看| 亚洲最新视频在线| 日韩精品极品视频| 亚洲第一男人av| 欧美成人精品在线| 国产成人精品视频| 欧美乱妇40p| 欧美成人三级视频网站| 久久99精品久久久久久琪琪| 社区色欧美激情 | 久久亚洲国产精品成人av秋霞| 亚洲欧美一区二区三区久久| 色av中文字幕一区| 亚洲精品98久久久久久中文字幕| 精品亚洲一区二区三区在线播放| 日韩在线免费视频观看| 欧美日本高清一区| 亚洲美女喷白浆| 一本色道久久88亚洲综合88| 亚洲香蕉伊综合在人在线视看| 亚洲欧美中文日韩v在线观看| 久久精品国亚洲| 久久久在线免费观看| 欧美日韩在线一区| 亚洲精品午夜精品| 国产深夜精品福利| 欧美国产日韩二区| 欧美一乱一性一交一视频| 久久久久久久一区二区| 久久91亚洲精品中文字幕| 亚洲欧洲在线播放| 亚洲网站在线看| 中文字幕亚洲精品| 国产在线播放91| 亚洲欧美第一页| 欧美午夜激情视频| 一区二区三区视频免费在线观看| 国产精品久久久久久久app| 91av在线视频观看| 91精品在线一区| 麻豆国产va免费精品高清在线| 亚洲人成在线观| 欧美性高跟鞋xxxxhd| 日韩激情av在线播放| 日本久久久久亚洲中字幕| 欧美日韩国产第一页| 欧美中文字幕在线播放| 国产欧美日韩免费看aⅴ视频| 欧美亚洲激情在线| 国产精品中文字幕在线| 久久久av电影| 亚洲最大福利视频| 国产成人精品免费久久久久| 欧美在线观看日本一区| xxxxxxxxx欧美| 亚洲奶大毛多的老太婆| 久久久久久久久久久免费精品| 欧美在线视频导航| 亚洲国产精品yw在线观看| 91网站在线免费观看| 欧美激情久久久久| 久久久久久久香蕉网| 欧美重口另类videos人妖| 国产精品白丝av嫩草影院| 欧美激情xxxxx| 色偷偷亚洲男人天堂| 九色精品美女在线| 日韩亚洲欧美成人| 亚洲国产精品人人爽夜夜爽| 久久久免费精品视频| 成人欧美一区二区三区黑人孕妇| 欧美人与性动交a欧美精品| 亚洲欧美激情一区| 日韩美女视频中文字幕| 4k岛国日韩精品**专区| 亚洲字幕在线观看| 欧美极品欧美精品欧美视频| 热re99久久精品国产66热| 中文字幕av一区二区| 国产精品福利在线| 欧美日韩国产va另类| 日韩精品视频中文在线观看| 日本精品久久久| 色无极亚洲影院| 欧美成人免费观看| 国产99久久精品一区二区 夜夜躁日日躁| 日韩av高清不卡| 亚洲福利视频在线| 日韩电影在线观看中文字幕| 一区二区三区国产视频| www.亚洲天堂| 国产999精品久久久| 91高潮精品免费porn| 亚洲性夜色噜噜噜7777| 国产精品视频自在线| 久久男人资源视频| 日本精品久久电影| 色悠久久久久综合先锋影音下载| 成人激情黄色网| 欧美一级大片视频| 成人av.网址在线网站| 久久久91精品国产一区不卡| 美日韩丰满少妇在线观看| 国产丝袜一区二区| 中文字幕欧美精品日韩中文字幕| 懂色av影视一区二区三区| 日韩av电影院| 一个人看的www欧美| 九九精品视频在线观看| 久久久亚洲欧洲日产国码aⅴ| 亚洲欧洲日韩国产| 97视频免费在线观看| 91精品久久久久| 欧美理论电影在线播放| 亚洲最大福利视频| 久久久91精品国产一区不卡| 欧美亚洲另类激情另类| 欧美疯狂xxxx大交乱88av| 68精品久久久久久欧美| yellow中文字幕久久| 日韩欧美中文字幕在线观看| 欧美国产在线视频| 日韩网站在线观看| 色吧影院999| 精品美女久久久久久免费| 中文字幕日韩欧美精品在线观看| 欧美福利视频在线观看| 国产精品视频免费在线观看|