php程序中实现验证码的生成和使用

<?php
class VailDationCode{//定义验证码的类
private $width;//定义验证码的宽度
private $height;//定义验证码的高度
private $codeNum;//定义验证码的字符数量
private $image;//定义图像资源
private $disturbColorNum;//定义验证码的干扰元素个数
private $checkCode;//定义变量用来存放验证码
function __construct($width=80,$height=20,$codeNum=4){//验证码的默认值
$this->width=$width;
$this->height=$height;
$this->codeNum=$codeNum;
$this->checkCode=$this->createCheckCode();
$number=floor(($width*$height)/15);//计算干扰元素的个数
if($number>240-$codeNum){
$this->disturbColorNum=240-$codeNum;
}else{
$this->disturbColorNum=$number;
}
}
//通过访问该方法,向浏览器中输出图像
function showImage(){
//第一步:创建图像背景
$this->createImage();
//第二步:设置干扰元素
$this->setDisturbColor();
//第三步:向图像中随机画出文本
$this->outputText();
//第四步:输出图像
$this->outputImage();
}
//通过访问该方法获取随机创建的验证码字符串
function getCheckCode(){

}
private function createImage(){
//创建图像资源
$this->image=imagecreatetruecolor($this->width,$this->height);
//随机背景色
$backcolor=imagecolorallocate($this->image , rand(225,255) , rand(225,255) , rand(225,255));
//为背景填充颜色
imagefill($this->image,0,0,$backcolor);
//设置边框颜色
$bordercolor=imagecolorallocate($this->image,0,0,0);
//画出矩形边框
imagerectangle($this->image,0,0,$this->width-1,$this->height-1,$bordercolor);
}
private function setDisturbColor(){
for($i=0;$i<$this->disturbColorNum;$i++){
$color=imagecolorallocate($this->image,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($this->image, rand(1, $this->width-2), rand(1, $this->height-2), $color);
}
for($i=0; $i<10; $i++){
$color=imagecolorallocate($this->image, rand(100, 255), rand(100, 255), rand(100, 255));
imagearc($this->image, rand(-10, $this->width), rand(-10, $this->height), rand(30, 300), rand(20, 200), 55, 44, $color);
}
}
private function createCheckCode(){
$code="23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKMNPQRSTUVWXYZ";//定义显示的字符串
$string="";
for($i=0; $i < $this->codeNum; $i++){
$char=$code{rand(0, strlen($code)-1)};//每次从字符串里面里面随机的取出一个
$string.=$char;
}
return $string;
}
private function outputText(){
for($i=0; $i<$this->codeNum; $i++){
$fontcolor=imagecolorallocate($this->image, rand(0, 128), rand(0, 128), rand(0, 128));
$fontsize=rand(3, 5);
$x=floor($this->width/$this->codeNum)*$i+3;
$y=rand(0, $this->height-15);
imagechar($this->image,$fontsize, $x, $y, $this->checkCode{$i},$fontcolor);//水平地画一个字符设置位置等属性
}
}
private function outputImage(){
//检测当前的php版本是否支持以下的图片格式,如果支持并且格式一样,就输出到浏览器这种格式
if(imagetypes() & IMG_GIF){
header("Content-Type:image/gif");
imagepng($this->image);//将 GD 图像流(image)以 PNG 格式输出到标准输出(通常为浏览器),或者如果用 filename 给出了文件名则将其输出到该文件。
}else if(imagetypes() & IMG_JPG){
header("Content-Type:image/jpeg");
imagepng($this->image);
}else if(imagetypes() & IMG_PNG){
header("Content-Type:image/png");
imagepng($this->image);
}else if(imagetypes() & IMG_WBMP){
header("Content-Type:image/vnd.wap.wbmp");
imagepng($this->image);
}else{
die("PHP不支持图像创建");
}
}
function __destruct(){
imagedestroy($this->image);
}
}

?>



验证码的使用


<?php
 session_start();
?>
<body>
 <form action="login.php" method="post">
  user:<input type="text" name="usenrame"><br>
  pass:<input type="passowrd" name="pass"><br>

  code: <input type="text" name="code" οnkeyup="if(this.value!=this.value.toUpperCase()) this.value=this.value.toUpperCase()"> <img src="code.php" οnclick="this.src='code.php?'+Math.random()"><br>

  <input type="submit" name="sub" value="login"><br>
 </form>
</body>


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值