php生成带干扰的验证码程序

这里介绍了一款安全性比较高的验证生成程序,可以带干扰线等内容,可以有效的防止用户用程序识别验证码的难度了,代码如下:

  1. <?php
  2. /*
  3. * Created on 2011-3-11
  4. * Programmer : xiaoyao, QQ:1045195056
  5. 验证通过判断输入值与$_SESSION['check_pic']值
  6. */
  7. session_start();
  8. function RandAscii($number){//$number产生数字和字母个数
  9. $arr=array('0','1','2','3','4','5','6','7','8','9',
  10. 'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','w','v','u','x','y','z');
  11. for ($i=1;$i<=$number;$i++)
  12. {
  13. $rand= $rand.$arr[rand(0,35)];
  14. }
  15. return $rand;
  16. }
  17. $rand=RandAscii(4);
  18. $_SESSION['check_pic']=$rand;//随机产生的四个数赋值session中,用于验证。
  19. $x=80;
  20. $y=24;
  21. $im=imagecreatetruecolor($x,$y);//创建图片
  22. $bg=imagecolorallocate($im,255,255,255);//设置颜色背景
  23. imagefill( $im,0,0,$bg);
  24. $wh=imagecolorallocate($im,255,255,0);
  25. $grey=imagecolorallocate($im,128,128,128);
  26. $yellow=imagecolorallocate($im,255,255,0);
  27. $red=imagecolorallocate($im,0,255,0);
  28. $foregroundArr = array(imagecolorallocate($im, rand(0, 20), rand(0, 20), rand(0, 20)),
  29. imagecolorallocate($im, rand(0, 20), rand(0, 10), rand(245, 255)),
  30. imagecolorallocate($im, rand(245, 255), rand(0, 20), rand(0, 10)),
  31. imagecolorallocate($im, rand(245, 255), rand(0, 20), rand(245, 255))
  32. );//字颜色数组
  33. //画边框
  34. $border = imagecolorallocate($im, 133, 153, 193);
  35. imagerectangle($im, 0, 0, $x - 1, $y - 1, $border);
  36. for($i=0;$i<10;$i++){ //画干扰线,10条
  37. imageline($im,rand(0,60),2,rand(0,60),20,$yellow);
  38. }
  39. for($j=0;$j<100;$j++){
  40. imagesetpixel($im,rand()%76,rand()%20,$red);
  41. }
  42. //imagestring($im,6,15,8,$rand,$wh);//字体大小1-5
  43. imagettftext($im, 14,rand(30, -30), 5, rand(15, 18) ,$foregroundArr[rand(0,3)], 'C:WindowsFontsArial.ttf',$rand[0]);
  44. imagettftext($im, 14,rand(50, -50), 24, rand(15, 18),$foregroundArr[rand(0,3)], 'C:WindowsFontsArial.ttf',$rand[1]);
  45. imagettftext($im, 14,rand(50, -50), 43, rand(15, 18) ,$foregroundArr[rand(0,3)], 'C:WindowsFontsArial.ttf',$rand[2]);
  46. imagettftext($im, 14,rand(30, -30), 62, rand(15, 18),$foregroundArr[rand(0,3)], 'C:WindowsFontsArial.ttf',$rand[3]);
  47. //开源代码phpfensi.com
  48. header("Content-type: image/jpeg");//输出图片
  49. imagejpeg($im);
  50. imagedestroy($im);
  51. ?>

调用方法,代码如下:

  1. <?php
  2. /*
  3. * Created on 2011-3-11
  4. * Programmer : xiaoyao, QQ:1045195056
  5. 验证通过判断输入值与$_SESSION['check_pic']值
  6. */
  7. session_start();//开启session
  8. if(isset($_POST['check']))
  9. {
  10. if($_POST['check'])
  11. {
  12. if($_POST['check']==$_SESSION['check_pic'])
  13. {
  14. echo " 验证码正确".$_SESSION['check_pic'];
  15. }
  16. else
  17. {
  18. echo " 验证码错误".$_SESSION['check_pic'];
  19. }
  20. }
  21. }
  22. ?>
  23. <FORM METHOD=POST ACTION="">
  24. <img src="index.php"><br> <!----链接图片--->
  25. <input type="text" name="check" >
  26. <input type="submit" value="提交">
  27. </FORM>