原文地址: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