PHP验证码生成类完整代码

本文章提供这款php验证码生成类灵活好用,用户可以定义各个成员 有宽、高、画布、字数、类型、画类型同时我们只要修改 $Type就可以定义生成的是纯数字,纯小写字母,大小写数字混合,有需要的朋友可参考.

PHP验证码生成类完整代码如下:

  1. <?php
  2. class Code{
  3. // 1. 定义各个成员 有宽、高、画布、字数、类型、画类型
  4. private $width; //宽度
  5. private $height; //高度
  6. private $num; //验证码字数
  7. private $imgType; //生成图片类型
  8. private $Type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小写数字混合
  9. private $hb; //画布
  10. public $codestr; // 验证码字串
  11. public function __construct($height=20,$num=4,$imgType="jpeg",$Type=1){
  12. $this->width = $num*20;
  13. $this->height = $height;
  14. $this->num = $num;
  15. $this->imgType = $imgType;
  16. $this->Type = $Type;
  17. $this->codestr = $this->codestr();
  18. $this->zuhe();
  19. }
  20. // 2. 定义随机获取字符串函数
  21. private function codestr(){
  22. switch($this->Type){
  23. case 1: // 类型为1 获取1-9随机数
  24. $str = implode("",array_rand(range(0,9),$this->num));
  25. break;
  26. case 2: // 类型为2 获取a-z随机小写字母
  27. $str = implode("",array_rand(array_flip(range(a,z)),$this->num));
  28. break;
  29. case 3: // 类型为3 获取数字,小写字母,大写字母 混合
  30. for($i=0;$i<$this->num;$i++){
  31. $m = rand(0,2);
  32. switch($m){
  33. case 0:
  34. $o = rand(48,57);
  35. break;
  36. case 1:
  37. $o = rand(65,90);
  38. break;
  39. case 2:
  40. $o = rand(97,122);
  41. break;
  42. }
  43. $str .= sprintf("%c",$o);
  44. }
  45. break;
  46. }
  47. return $str;
  48. }
  49. // 3. 初始化画布图像资源
  50. private function Hb(){
  51. $this->hb = imagecreatetruecolor($this->width,$this->height);
  52. }
  53. // 4. 生成背景颜色
  54. private function Bg(){
  55. return imagecolorallocate($this->hb,rand(130,250),rand(130,250),rand(130,250));
  56. }
  57. // 5. 生成字体颜色
  58. private function Font(){
  59. return imagecolorallocate($this->hb,rand(0,100),rand(0,100),rand(0,100));
  60. }
  61. // 6. 填充背景颜色
  62. private function BgColor(){
  63. imagefilledrectangle($this->hb,0,0,$this->width,$this->height,$this->Bg());
  64. }
  65. // 7. 干扰点
  66. private function ganrao(){
  67. $sum=floor(($this->width)*($this->height)/3);
  68. for($i=0;$i<$sum;$i++){
  69. imagesetpixel($this->hb,rand(0,$this->width),rand(0,$this->height),$this->Bg());
  70. }
  71. }
  72. // 8. 随机直线 弧线
  73. private function huxian(){
  74. for($i=0;$i<$this->num;$i++){
  75. imageArc($this->hb,rand(0,$this->width),rand(0,$this->height),rand(0,$this->width),rand(0,$this->height),rand(0,360),rand(0,360),$this->Bg());
  76. }
  77. }
  78. // 9. 写字
  79. private function xiezi(){
  80. for($i=0;$i<$this->num;$i++){
  81. $x=ceil($this->width/$this->num)*$i;
  82. $y=rand(1,$this->height-15);
  83. imagechar($this->hb,5,$x+4,$y,$this->codestr[$i],$this->Font());
  84. }
  85. }
  86. // 10. 输出
  87. private function OutImg(){
  88. $shuchu="image".$this->imgType;
  89. $header="Content-type:image/".$this->imgType;
  90. if(function_exists($shuchu)){
  91. header($header);
  92. $shuchu($this->hb);
  93. }else{
  94. exit("GD库没有此类图像");
  95. }
  96. }
  97. // 11. 拼装
  98. private function zuhe(){
  99. $this->Hb();
  100. $this->BgColor();
  101. $this->ganrao();
  102. $this->huxian();
  103. $this->xiezi();
  104. $this->OutImg();
  105. }//开源代码phpfensi.com
  106. public function getCodeStr(){
  107. return $this->codestr;
  108. }
  109. }
  110. ?>