一个PHP实现的验证码类

本文讲解一个PHP实现的验证码类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
config( '宽度' , '高度' , '字符个数' , '验证码session索引' );
$image ->create(); //这样就会向浏览器输出一张图片
//所有参数都可以省略,
* 默认是:宽80 高20 字符数4 验证码session索引captcha_code
* 第四个参数即把验证码存到 $_SESSION [ 'captcha_code' ]
* 最简单使用示例:
$image = new  Captcha();
$image ->create(); //这样就会向浏览器输出一张图片
*/
class  Captcha
{
private  $width =80, $height =20, $codenum =4;
public  $checkcode ;    //产生的验证码
private  $checkimage ;   //验证码图片 
private  $disturbColor  '' //干扰像素
private  $session_flag = 'captcha_code' ; //存到session中的索引
//尝试开始session
function  __construct(){
   @session_start();
}
/*
* 参数:(宽度,高度,字符个数)
*/
function  config( $width = '80' , $height = '20' , $codenum = '4' , $session_flag = 'captcha_code' )
   $this ->width= $width ;
   $this ->height= $height ;
   $this ->codenum= $codenum ;
   $this ->session_flag= $session_flag ;
}
function  create()
{
   //输出头
   $this ->outFileHeader();
   //产生验证码
   $this ->createCode();
   //产生图片
   $this ->createImage();
   //设置干扰像素
   $this ->setDisturbColor();
   //往图片上写验证码
   $this ->writeCheckCodeToImage();
   imagepng( $this ->checkimage);
   imagedestroy( $this ->checkimage);
   $_SESSION [ $this ->session_flag]= $this ->checkcode;
}
/*
   * @brief 输出头
   */
private  function  outFileHeader()
{
   header ( "Content-type: image/png" );
}
/**
   * 产生验证码
   */
private  function  createCode()
{
   $this ->checkcode =  strtoupper ( substr (md5(rand()),0, $this ->codenum));
}
/**
   * 产生验证码图片
   */
private  function  createImage()
{
   $this ->checkimage = @imagecreate( $this ->width, $this ->height);
   $back  = imagecolorallocate( $this ->checkimage,255,255,255); 
   $border  = imagecolorallocate( $this ->checkimage,0,0,0); 
   imagefilledrectangle( $this ->checkimage,0,0, $this ->width - 1, $this ->height - 1, $back );  // 白色底
   imagerectangle( $this ->checkimage,0,0, $this ->width - 1, $this ->height - 1, $border );   // 黑色边框
}
/**
   * 设置图片的干扰像素 
   */
private  function  setDisturbColor()
{
   for  ( $i =0; $idisturbColor  = imagecolorallocate( $this ->checkimage, rand(0,255), rand(0,255), rand(0,255));
   imagesetpixel( $this ->checkimage,rand(2,128),rand(2,38), $this ->disturbColor);
   }
}
/**
   *
   * 在验证码图片上逐个画上验证码
   *
   */
private  function  writeCheckCodeToImage()
{
   for  ( $i =0; $icodenum ; $i ++)
   {
   $bg_color  = imagecolorallocate ( $this ->checkimage, rand(0,255), rand(0,128), rand(0,255));
   $x  floor ( $this ->width/ $this ->codenum)* $i ;
   $y  = rand(0, $this ->height-15);
   imagechar ( $this ->checkimage, rand(5,8),  $x +5,  $y $this ->checkcode[ $i ],  $bg_color );
   }
}
function  __destruct()
{
   unset( $this ->width, $this ->height, $this ->codenum, $this ->session_flag);
}
}
?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值