当前位置:首页 > PHP教程 > php图像处理 > 列表

完美的php生成验证码程序代码

发布:smiling 来源: PHP粉丝网  添加日期:2014-08-18 15:24:37 浏览: 评论:0 

本文章给大家介绍一个非常不错的生成验证码的php程序,首先当用户请求HTTP的时候,服务器端就创建一个唯一的sessionid,这个是session会话ID,然后就去启动GD库或者imagemagick这些画图工具,把程序生成的随机的字符写到一张图片里面,然后显示到客户端,再由用户输入提交数据,然后我们程序把生成验证保存在session中进行比较,这样就完成了验证码的生成与验证了.

新建一个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. $font_size = $image_height * 0.75; 
  25. $image = @imagecreate($image_width$image_height); 
  26.  
  27. /* setting the background, text and noise colours here */ 
  28. $background_color = imagecolorallocate($image, 255, 255, 255); 
  29.  
  30. $arr_text_color = hexrgb($captcha_text_color); 
  31. $text_color = imagecolorallocate($image$arr_text_color['red'],  
  32.         $arr_text_color['green'], $arr_text_color['blue']); 
  33.  
  34. $arr_noice_color = hexrgb($captcha_noice_color); 
  35. $image_noise_color = imagecolorallocate($image$arr_noice_color['red'],  
  36.         $arr_noice_color['green'], $arr_noice_color['blue']); 
  37.  
  38. /* generating the dots randomly in background */ 
  39. for$i=0; $i<$random_dots$i++ ) { 
  40. imagefilledellipse($image, mt_rand(0,$image_width), 
  41.  mt_rand(0,$image_height), 2, 3, $image_noise_color); 
  42.  
  43. /* generating lines randomly in background of image */ 
  44. for$i=0; $i<$random_lines$i++ ) { 
  45. imageline($image, mt_rand(0,$image_width), mt_rand(0,$image_height), 
  46.  mt_rand(0,$image_width), mt_rand(0,$image_height), $image_noise_color); 
  47.  
  48. /* create a text box and add 6 letters code in it */ 
  49. $textbox = imagettfbbox($font_size, 0, $font$code);  
  50. $x = ($image_width - $textbox[4])/2; 
  51. $y = ($image_height - $textbox[5])/2; 
  52. imagettftext($image$font_size, 0, $x$y$text_color$font , $code); 
  53.  
  54. /* Show captcha image in the page html page */ 
  55. header('Content-Type: image/jpeg');// defining the image type to be shown in browser widow 
  56. imagejpeg($image);//showing the image 
  57. imagedestroy($image);//destroying the image instance 
  58. //设置session,做验证 
  59. //开源代码phpfensi.com 
  60. $_SESSION['6_letters_code'] = $code
  61.  
  62. function hexrgb ($hexstr
  63.   $int = hexdec($hexstr); 
  64.  
  65.   return array("red" => 0xFF & ($int >> 0x10), 
  66.                "green" => 0xFF & ($int >> 0x8), 
  67.                "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. .table td{ 
  23.     background-color:#F8F8F8;     
  24. </style> 
  25.  
  26. <form action="" method="post" name="form1" id="form1" > 
  27.   <table width="400" border="0" align="center" cellpadding="5" cellspacing="1"
  28. <?php if(isset($msg)){?> 
  29.     <tr> 
  30.       <td colspan="2" align="center" valign="top"><?php echo $msg;?></td> 
  31.     </tr> 
  32. <?php } ?>  
  33.     <tr> 
  34.       <td align="right" valign="top"> 验证码Demo:</td> 
  35.       <td><img src="captcha_code_file.php?rand=<?php echo rand(0,20);?>" id='captchaimg'  onclick="refreshCaptcha();" ><br> 
  36.         <label for='message'>请输入验证码:</label> 
  37.         <br> 
  38.         <input id="6_letters_code" name="6_letters_code" type="text"
  39.         <br> 
  40.         如果看不到,请 <a href='javascript: refreshCaptcha();'>点我</a> 刷新一下! 
  41.         </p></td> 
  42.     </tr> 
  43.     <tr> 
  44.       <td>&nbsp;</td> 
  45.       <td><input name="Submit" type="submit" onclick="return validate();" value="Submit"></td> 
  46.     </tr> 
  47.   </table> 
  48. </form> 
  49. <script type='text/javascript'
  50. //定义的刷新请求 
  51. function refreshCaptcha() 
  52.     var img = document.images['captchaimg']; 
  53.     img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000; 
  54. </script> 

Tags: php生成 验证码 图片

分享到: