首页 > php教程 > php手册 > 正文

PHP制作验证码

WBOY
发布: 2016-06-06 19:47:03
原创
782 人浏览过

1: ?php 2: /* 3: * file:myvcode.class.php 4: * 验证码类,类名Vcode 5: */ 6: class Vcode 7: { 8: private $width; /*验证码宽度*/ 9: private $height; /*验证码高度*/ 10: private $codeNum; /*验证码字符个数*/ 11: private $checkCode; /*验证码字符*

<span>   1:</span> <?php 
登录后复制
<span>   2:</span> <span>/*</span>
登录后复制
<span>   3:</span> <span>* file:myvcode.class.php</span>
登录后复制
<span>   4:</span> <span>* 验证码类,类名Vcode</span>
登录后复制
<span>   5:</span> <span>*/</span>
登录后复制
<span>   6:</span> <span>class</span> Vcode
登录后复制
<span>   7:</span> {
登录后复制
<span>   8:</span>     <span>private</span> $width;              <span>/*验证码宽度*/</span>
登录后复制
<span>   9:</span>     <span>private</span> $height;             <span>/*验证码高度*/</span>
登录后复制
<span>  10:</span>     <span>private</span> $codeNum;            <span>/*验证码字符个数*/</span>
登录后复制
<span>  11:</span>     <span>private</span> $checkCode;            <span>/*验证码字符*/</span>
登录后复制
<span>  12:</span>     <span>private</span> $image;                <span>/*验证码资源*/</span>
登录后复制
<span>  13:</span>     <span>private</span> $pixNum;            <span>/*绘制干扰点的个数*/</span>
登录后复制
<span>  14:</span>     <span>private</span> $lineNum;            <span>/*绘制干扰线的条数*/</span>
登录后复制
<span>  15:</span>
登录后复制
<span>  16:</span>     <span>/*</span>
登录后复制
<span>  17:</span> <span>    *构造方法实例化验证码对象,并初始化数据</span>
登录后复制
<span>  18:</span> <span>    *@param int $width         设置默认宽度</span>
登录后复制
<span>  19:</span> <span>    *@param int $height     设置默认高度</span>
登录后复制
<span>  20:</span> <span>    *@param int $codeNum    设置验证码中的字符个数</span>
登录后复制
<span>  21:</span> <span>    *@param int $pixNum        设置干扰点的个数</span>
登录后复制
<span>  22:</span> <span>    *@param int $lineNum    设置干扰线的数量</span>
登录后复制
<span>  23:</span> <span>    */</span>
登录后复制
<span>  24:</span>     <span>function</span> __construct($width=80,$height=40,$codeNum=4,$pixNum=40,$lineNum=5)
登录后复制
<span>  25:</span>     {
登录后复制
<span>  26:</span>         $this->width = $width;
登录后复制
<span>  27:</span>         $this->height = $height;
登录后复制
<span>  28:</span>         $this->codeNum = $codeNum;
登录后复制
<span>  29:</span>         $this->pixNum = $pixNum;
登录后复制
<span>  30:</span>         $this->lineNum = $lineNum;
登录后复制
<span>  31:</span>     }
登录后复制
<span>  32:</span>     <span>/*内部私有方法,创建图像资源*/</span>
登录后复制
<span>  33:</span>     <span>private</span> <span>function</span> getCreateImage()
登录后复制
<span>  34:</span>     {
登录后复制
<span>  35:</span>         $this->image = imagecreatetruecolor($this->width, $this->height);
登录后复制
<span>  36:</span>         $white = imagecolorallocate($this->image,0xff,0xff,0xff);
登录后复制
<span>  37:</span>         imagefill($this->image, 0, 0, $white);
登录后复制
<span>  38:</span>         $black = imagecolorallocate($this->image,0,0,0);
登录后复制
<span>  39:</span>         imagerectangle($this->image, 0, 0, $this->width-1, $this->height-1, $black);
登录后复制
<span>  40:</span>     }
登录后复制
<span>  41:</span>     <span>/*内部私有方法,绘制字符,去掉o0Llz和012*/</span>
登录后复制
<span>  42:</span>     <span>private</span> <span>function</span> createCheckCode()
登录后复制
<span>  43:</span>     {
登录后复制
<span>  44:</span>         $code = <span>'3456789abcdefghijkmnpqrstuvwxyABCDEFGHIJKMNPQRSTUVWXY'</span>;
登录后复制
<span>  45:</span>         $this->checkCode = <span>""</span>;
登录后复制
<span>  46:</span>         <span>for</span>($i=0; $icodeNum;$i++)
登录后复制
<span>  47:</span>         {
登录后复制
<span>  48:</span>             $char = $code{rand(0,strlen($code) - 1)};
登录后复制
<span>  49:</span>             $this->checkCode .= $char;
登录后复制
<span>  50:</span>             $fontColor = imagecolorallocate($this->image, rand(0,128), rand(0,128),rand(0,128));
登录后复制
<span>  51:</span>             $fontSize = rand(3,5);
登录后复制
<span>  52:</span>             $x = rand(0,$this->width-imagefontwidth($fontSize));
登录后复制
<span>  53:</span>             $y = rand(0,$this->height-imagefontheight($fontSize));
登录后复制
<span>  54:</span>             imagechar($this->image, $fontSize, $x, $y, $char, $fontColor);
登录后复制
<span>  55:</span>         }
登录后复制
<span>  56:</span>     }
登录后复制
<span>  57:</span>     <span>/*内部私有方法设置干扰元素*/</span>
登录后复制
<span>  58:</span>     <span>private</span> <span>function</span> setDisturbColor()
登录后复制
<span>  59:</span>     {
登录后复制
<span>  60:</span>         <span>/*绘制干扰点*/</span>
登录后复制
<span>  61:</span>         <span>for</span>($i=0; $ipixNum; $i++)
登录后复制
<span>  62:</span>         {
登录后复制
<span>  63:</span>             $color = imagecolorallocate($this->image, rand(0,255), rand(0,255), rand(0,255));
登录后复制
<span>  64:</span>             imagesetpixel($this->image, rand(1,$this->width-2), rand(1,$this->height-2), $color);
登录后复制
<span>  65:</span>         }
登录后复制
<span>  66:</span>         <span>/*绘制干扰线*/</span>
登录后复制
<span>  67:</span>         <span>for</span>($i=0; $ilineNum; $i++)
登录后复制
<span>  68:</span>         {
登录后复制
<span>  69:</span>             $color = imagecolorallocate($this->image, rand(0,255), rand(0,255), rand(0,255));
登录后复制

70: imageline($this->image, rand(1,$this->width / 2), rand(1,$this->height / 2),

rand($this->width / 2,$this->width – 2), rand($this->height / 2,$this->height – 2), $color);

<span>  71:</span>         }
登录后复制
<span>  72:</span>     }
登录后复制
<span>  73:</span>     <span>/*开启session保存 利用echo 输出图像*/</span>
登录后复制
<span>  74:</span>     <span>function</span> __toString()
登录后复制
<span>  75:</span>     {
登录后复制
<span>  76:</span>         $_SESSION[<span>'code'</span>] = strtoupper($this->checkCode);
登录后复制
<span>  77:</span>         $this->getCreateImage();
登录后复制
<span>  78:</span>         $this->createCheckCode();
登录后复制
<span>  79:</span>         $this->setDisturbColor();
登录后复制
<span>  80:</span>         $this->outputImg();
登录后复制
<span>  81:</span>     }
登录后复制
<span>  82:</span>     <span>/*内部私有方法输出图像*/</span>
登录后复制
<span>  83:</span>     <span>private</span> <span>function</span> outputImg()
登录后复制
<span>  84:</span>     {
登录后复制
<span>  85:</span>         header(<span>"content-type:image/png"</span>);
登录后复制
<span>  86:</span>         imagepng($this->image);
登录后复制
<span>  87:</span>     }
登录后复制
<span>  88:</span>     <span>/*析构方法,释放对象*/</span>
登录后复制
<span>  89:</span>     <span>function</span> __destruct()
登录后复制
<span>  90:</span>     {
登录后复制
<span>  91:</span>         imagedestroy($this->image);
登录后复制
<span>  92:</span>     }
登录后复制
<span>  93:</span> }
登录后复制
<span>  94:</span> ?>
登录后复制
相关标签:
来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门推荐
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!