php验证码实现局部刷新

一般在用验证码时我们都要实现局部刷新了,这个是必然的,也是提高用户体验的一点,下面我们来看一个php验证码在实际应用中的用法,有需要的朋友来参考一下.

  1. /*
  2. * Auth_code()是验证码函数
  3. * @access public
  4. * @param int $width 表示验证码的长度,默认为80
  5. * @param int $height 表示验证码的高度,默认为20
  6. * @param int $num 表示验证码中数字位数,默认为4
  7. * @param int $line 表示验证码中线的条数,默认为4
  8. * @param int $line 表示验证码中点的个数,默认为150
  9. */
  10. function Auth_code($width = 80,$height = 20,$num = 4,$line = 4,$dot = 150) {
  11. $length = floor($width/$num); //floor:取整数部分 length:每段平均长度
  12. for($i=0;$i<$num;$i++)
  13. @$rand.=dechex(mt_rand(1,15));
  14. $_SESSION['code']=$rand;
  15. //新建一个黑色底的画板
  16. $im=imagecreatetruecolor($width,$height);
  17. //取色
  18. $green=imagecolorallocate($im,0,255,0);
  19. $red = imagecolorallocate($im,255,0,0);
  20. $white=imagecolorallocate($im,255,255,255);
  21. $black = imagecolorallocate($im,0,0,0);
  22. //填充画板
  23. //imagefill($im,0,0,$green);
  24. //画线
  25. for($i=0;$i<$line;$i++){
  26. $color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
  27. imageline($im,rand(10,$width-10),0,rand(0,$width),$height,$color);
  28. }
  29. //画点
  30. for($i=0;$i<$dot;$i++){
  31. $color=imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
  32. imagesetpixel($im,rand(0,$width),rand(0,$height),$color);
  33. }
  34. //画数字
  35. for($i=0;$i<$num;$i++) {
  36. imagestring($im,5,mt_rand($i*$length+1,($i+1)*$length-8),mt_rand(0,$height-14),$_SESSION['code'][$i],$white);
  37. }
  38. //开源代码phpfensi.com
  39. //输出图片
  40. header("content-type:image/jpeg");
  41. imagejpeg($im);
  42. }

php主要函数:

imagecreatetruecolor //新建一个黑色底的画板

imagecolorallocate //取色

imagefill //填充画板

imageline //画线

imagesetpixel //画点

imagestring //画字符串(本验证码为数字)

注意:在将数字验证码画上画板时要注意字体越界,所以要相应减去一些范围,详见附件.

局部刷新验证码:

<img src="code.php" onclick="javascript:this.src='code.php?>