原文地址: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>
皕应 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协议的系统;
谢谢推荐皕应的HCaptcha,使用后效果很棒
This is the perfect blog for anybody who wants to understand this topic.
You know so much its almost tough to argue with you (not that
I really would want to…HaHa). You certainly
put a new spin on a topic that’s been written about for msny
years. Wonbderful stuff, just wonderful! https://www.amazon.com/Building-Successful-Amazon-Business-automating-ebook/dp/B074NB8LYV
Aѡ, this was an incredibly nice post. Taking a few minutes and actual effort to make a top notch article… but what can I
say… Iprocгastinate a lot and don’t manage to get neaгly
anytһing dⲟne. http://uch.Zncai.com/space.php?uid=10233&do=blog&id=64632