查看: 993|回复: 0

[PHP学习] 利用php生成验证码

发表于 2017-12-13 08:00:02

话不多说,请看代码:

  1. <?php
  2. /**
  3. * php生成验证码
  4. * @param $width 画布宽
  5. * @param $height 画布高
  6. * @param $vcodelen 验证码长度
  7. * @param $pointnum 干扰像素点数量
  8. * @param $linenum 干扰线条数量
  9. *
  10. * 思路:创建验证码画布,生成并填充背景色,生成验证码内容/干扰像素点/线,填充到画布,输出。
  11. */
  12. $width = 100;
  13. $height = 30;
  14. $vcodelen = 4;
  15. $pointnum = 200;
  16. $linenum = 3;
  17. // 创建画布
  18. $image = imagecreatetruecolor($width, $height);
  19. // 创建色块
  20. $bgcolor = imagecolorallocate($image, 255, 255, 255);
  21. // 填充画布背景色
  22. imagefill($image, 0, 0, $bgcolor);
  23. // 验证码内容
  24. for ($i=0; $i < $vcodelen; $i++) {
  25. // 字体大小
  26. $fontsize = 5;
  27. // 字体颜色,颜色在限定范围内随机
  28. $fontcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
  29. $data = 'abcdefghijklmnopqrstuvwxyz0123456789';
  30. // 验证码内容在以上字符串内随机截取
  31. $fontcontent = substr($data, rand(0,strlen($data)),1);
  32. // 字符串显示位置
  33. $x = ($i*$width/4)+rand(5,15);
  34. $y = rand(5,10);
  35. // 字符串填充图片
  36. // imagestring的字体大小可选1-5,字体再大需要用imagettftext函数(需要字体文件)
  37. imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
  38. // imagettftext($image, $fontsize, 0, $x, $y, $fontcolor, '/font/Geneva.dfont', $fontcontent);
  39. }
  40. // 干扰像素点
  41. for ($i=0; $i < $pointnum; $i++) {
  42. $pointcolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
  43. // 画布填充像素点函数
  44. imagesetpixel($image, rand(0,$width), rand(0,$height), $pointcolor);
  45. }
  46. // 干扰线条
  47. for ($i=0; $i < $linenum; $i++) {
  48. $linecolor = imagecolorallocate($image, rand(0,120), rand(0,120), rand(0,120));
  49. // 画布填充线条函数
  50. imageline($image, rand(0,$width), rand(0,$height), rand(0,$width), rand(0,$height), $linecolor);
  51. }
  52. // 图片输出格式
  53. header('content-type: image/png');
  54. // 输出验证码图片
  55. imagepng($image);
  56. // 销毁画布
  57. imagedestroy($image);
  58. ?>
复制代码

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持程序员之家!



回复

使用道具 举报