PHP实现简单实用的验证码类
本文实例讲述了PHP实现简单实用的验证码类。分享给大家供大家参考。具体如下:
<?php
/**
*@version1.0
*@authorboltedsnail
*@date2011-10-15
*@PHP验证码类
*使用方法:
*$image=newCaptcha();
*$image->config('宽度','高度','字符个数','验证码session索引');
*$image->create();//这样就会向浏览器输出一张图片
*//所有参数都可以省略,
*默认是:宽80高20字符数4验证码session索引captcha_code
*第四个参数即把验证码存到$_SESSION['captcha_code']
*最简单使用示例:
*$image=newCaptcha();
*$image->create();//这样就会向浏览器输出一张图片
*/
classCaptcha
{
private$width=80,$height=20,$codenum=4;
public$checkcode;//产生的验证码
private$checkimage;//验证码图片
private$disturbColor='';//干扰像素
private$session_flag='captcha_code';//存到session中的索引
//尝试开始session
function__construct(){
@session_start();
}
/*
*参数:(宽度,高度,字符个数)
*/
functionconfig($width='80',$height='20',$codenum='4',$session_flag='captcha_code')
{
$this->width=$width;
$this->height=$height;
$this->codenum=$codenum;
$this->session_flag=$session_flag;
}
functioncreate()
{
//输出头
$this->outFileHeader();
//产生验证码
$this->createCode();
//产生图片
$this->createImage();
//设置干扰像素
$this->setDisturbColor();
//往图片上写验证码
$this->writeCheckCodeToImage();
imagepng($this->checkimage);
imagedestroy($this->checkimage);
$_SESSION[$this->session_flag]=$this->checkcode;
}
/*
*@brief输出头
*/
privatefunctionoutFileHeader()
{
header("Content-type:image/png");
}
/**
*产生验证码
*/
privatefunctioncreateCode()
{
$this->checkcode=strtoupper(substr(md5(rand()),0,$this->codenum));
}
/**
*产生验证码图片
*/
privatefunctioncreateImage()
{
$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);//黑色边框
}
/**
*设置图片的干扰像素
*/
privatefunctionsetDisturbColor()
{
for($i=0;$i<=200;$i++)
{
$this->disturbColor=imagecolorallocate($this->checkimage,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($this->checkimage,rand(2,128),rand(2,38),$this->disturbColor);
}
}
/**
*
*在验证码图片上逐个画上验证码
*
*/
privatefunctionwriteCheckCodeToImage()
{
for($i=0;$i<$this->codenum;$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);
}
}
?>
希望本文所述对大家的php程序设计有所帮助。