Home> php教程> php手册> body text

PHP制作验证码

WBOY
Release: 2016-06-06 19:47:03
Original
754 people have browsed it

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; /*验证码字符*

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

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);

 71: }
Copy after login
 72: }
Copy after login
 73: /*开启session保存 利用echo 输出图像*/
Copy after login
 74: function __toString()
Copy after login
 75: {
Copy after login
 76: $_SESSION['code'] = strtoupper($this->checkCode);
Copy after login
 77: $this->getCreateImage();
Copy after login
 78: $this->createCheckCode();
Copy after login
 79: $this->setDisturbColor();
Copy after login
 80: $this->outputImg();
Copy after login
 81: }
Copy after login
 82: /*内部私有方法输出图像*/
Copy after login
 83: private function outputImg()
Copy after login
 84: {
Copy after login
 85: header("content-type:image/png");
Copy after login
 86: imagepng($this->image);
Copy after login
 87: }
Copy after login
 88: /*析构方法,释放对象*/
Copy after login
 89: function __destruct()
Copy after login
 90: {
Copy after login
 91: imagedestroy($this->image);
Copy after login
 92: }
Copy after login
 93: }
Copy after login
 94: ?>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
    Latest Downloads
    More>
    Web Effects
    Website Source Code
    Website Materials
    Front End Template
    About us Disclaimer Sitemap
    php.cn:Public welfare online PHP training,Help PHP learners grow quickly!