PHP验证码-类

 原文地址:http://www.windsfly.cn/blog/article.asp?id=1013

1、验证码类文件 CreateImg.class.php

<?php
/**
* @version 1.0
* @author   Ben
* @date 2008-1-30
* @email jinmaodao116@163.com
* @验证码文件类
* int function imagecolorallocate(resource image, int red, int green, int blue) //为一幅图像分配颜色
* bool function imagefilledrectangle(resource image, int x1, int y1, int x2, int y2, int color) //画一矩形并填充
* bool function imagerectangle(resource image, int x1, int y1, int x2, int y2, int col)   //画一个矩形
* bool function imagesetpixel(resource image, int x, int y, int color)   //画一个单一像素
*/
class ValidationCode
{
private $width,$height,$codenum;
public $checkcode;     //产生的验证码
private $checkimage;    //验证码图片
private $disturbColor = ''; //干扰像素
/*
* 参数:(宽度,高度,字符个数)
*/
function __construct($width='80',$height='20',$codenum='4')
{
   $this->width=$width;
   $this->height=$height;
   $this->codenum=$codenum;
}
function outImg()
{
   //输出头
   $this->outFileHeader();
   //产生验证码
   $this->createCode();
   //产生图片
   $this->createImage();
   //设置干扰像素
   $this->setDisturbColor();
   //往图片上写验证码
   $this->writeCheckCodeToImage();
   imagepng($this->checkimage);
   imagedestroy($this->checkimage);
}
/*
   * @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;$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);
   }
}
/**
   *
   * 在验证码图片上逐个画上验证码
   *
   */
private function writeCheckCodeToImage()
{
   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, $y, $this->checkcode[$i], $bg_color);
   }
}
function __destruct()
{
   unset($this->width,$this->height,$this->codenum);
}
}
?>

 

2、包含文件 imgcode.php

 

<?php
session_start();
require_once('CreateImg.class.php');
$image = new ValidationCode('80','20','4');    //图片长度、宽度、字符个数
$image->outImg();
$_SESSION['validationcode'] = $image->checkcode; //存贮验证码到 $_SESSION 中
?>

 

3、前台文件 image.php

<?php
session_start();
$test = $_POST['test'];
$test = strtoupper(trim($test));
$submit = $_POST['submit'];
if(isset($submit)){
if($test==$_SESSION['validationcode']){
   echo 'true';
} else {
   echo 'false';
}
}
?>
<html>
<head>
<title>Image</title>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script language="javascript">
function newgdcode(obj,url) {
obj.src = url+ '?nowtime=' + new Date().getTime();
//后面传递一个随机参数,否则在IE7和火狐下,不刷新图片
}
</script>
<body>
<img src="imgcode.php" alt="看不清楚,换一张" align="absmiddle" style="cursor: pointer;" onclick="javascript:newgdcode(this,"http://blog.51cto.com/viewpic.php?refimg=" + this.src);" />
<form method="POST" name="form1" action="image.php">
<input type="text" name="test">
<br />
<input type="submit" name="submit" value="提交">
</form>
</body>
</head>
</html>

 

相关推荐

4 thoughts on “PHP验证码-类”

  1. 皕应 http://www.hinsite.com

    HCaptcha验证码 是与开发语言无关、样式可调整的免费图形验证码系统。

    1. 安全 系统可以非常有效地阻止网络机器人的注册,登录,内容发布,系统具有智能的辨识与阻止机器人访问能力,从而保护信息安全;

    2. 有效 系统提供的验证码是对用户容易辨识对识别器不容易辨别;

    3. 稳定 系统保证验证码的显示与验证快速与稳定;

    4. 易用 系统对不同语言PHP/JSP/ASP/ASP.NET[C#、VB]等主流语言提供验证码的显示与验证端代码与例子,开发者可以在几乎不需要更改代码的情况下集成到任何系统。系统还提供验证码样式的管理设置功能,不需要更改代码轻易地更改样式;

    5. 强大 系统除提供验证码外还提供各种统计功能与IP阻断等功能,安全性完全掌控在开发者手中;

    6. 与开发语言无关 系统API接口,通过HTTPS协议实现,任何语言都可以使用HCaptcha;

    7. 样式丰富 系统提供的自定义样式、JS支持模式、弹出模式、组件模式供开发者选择,每个模式可以选择多种样式;

    8. 支持范围广 系统不仅支持Web站点的验证码,同时支持Wap、客户端程序[IPhone/Android/PC Client]等支持HTTPS协议的系统;

    回复

Leave a Comment