PHP验证码类代码( 最新修改,完全定制化! )


Posted in PHP onDecember 02, 2010

Authnum.class.php 下载

<?php 
session_start(); 
class Authnum { 
//图片对象、宽度、高度、验证码长度 
private $im; 
private $im_width; 
private $im_height; 
private $len; 
//随机字符串、y轴坐标值、随机颜色 
private $randnum; 
private $y; 
private $randcolor; 
//背景色的红绿蓝,默认是浅灰色 
public $red=238; 
public $green=238; 
public $blue=238; 
/** 
* 可选设置:验证码类型、干扰点、干扰线、Y轴随机 
* 设为 false 表示不启用 
**/ 
//默认是大小写数字混合型,1 2 3 分别表示 小写、大写、数字型 
public $ext_num_type=''; 
public $ext_pixel = false; //干扰点 
public $ext_line = false; //干扰线 
public $ext_rand_y= true; //Y轴随机 
function __construct ($len=4,$im_width='',$im_height=25) { 
// 验证码长度、图片宽度、高度是实例化类时必需的数据 
$this->len = $len; $im_width = $len * 15; 
$this->im_width = $im_width; 
$this->im_height= $im_height; 
$this->im = imagecreate($im_width,$im_height); 
} 
// 设置图片背景颜色,默认是浅灰色背景 
function set_bgcolor () { 
imagecolorallocate($this->im,$this->red,$this->green,$this->blue); 
} 
// 获得任意位数的随机码 
function get_randnum () { 
$an1 = 'abcdefghijklmnopqrstuvwxyz'; 
$an2 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
$an3 = '0123456789'; 
if ($this->ext_num_type == '') $str = $an1.$an2.$an3; 
if ($this->ext_num_type == 1) $str = $an1; 
if ($this->ext_num_type == 2) $str = $an2; 
if ($this->ext_num_type == 3) $str = $an3; 
for ($i = 0; $i < $this->len; $i++) { 
$start = rand(1,strlen($str) - 1); 
$randnum .= substr($str,$start,1); 
} 
$this->randnum = $randnum; 
$_SESSION[an] = $this->randnum; 
} 
// 获得验证码图片Y轴 
function get_y () { 
if ($this->ext_rand_y) $this->y = rand(5, $this->im_height/5); 
else $this->y = $this->im_height / 4 ; 
} 
// 获得随机色 
function get_randcolor () { 
$this->randcolor = imagecolorallocate($this->im,rand(0,100),rand(0,150),rand(0,200)); 
} 
// 添加干扰点 
function set_ext_pixel () { 
if ($this->ext_pixel) { 
for($i = 0; $i < 100; $i++){ 
$this->get_randcolor(); 
imagesetpixel($this->im, rand()%100, rand()%100, $this->randcolor); 
} 
} 
} 
// 添加干扰线 
function set_ext_line () { 
if ($this->ext_line) { 
for($j = 0; $j < 2; $j++){ 
$rand_x = rand(2, $this->im_width); 
$rand_y = rand(2, $this->im_height); 
$rand_x2 = rand(2, $this->im_width); 
$rand_y2 = rand(2, $this->im_height); 
$this->get_randcolor(); 
imageline($this->im, $rand_x, $rand_y, $rand_x2, $rand_y2, $this->randcolor); 
} 
} 
} 
/**创建验证码图像: 
* 建立画布(__construct函数) 
* 设置画布背景($this->set_bgcolor();) 
* 获取随机字符串($this->get_randnum ();) 
* 文字写到图片上(imagestring函数) 
* 添加干扰点/线($this->set_ext_line(); $this->set_ext_pixel();) 
* 输出图片 
**/ 
function create () { 
$this->set_bgcolor(); 
$this->get_randnum (); 
for($i = 0; $i < $this->len; $i++){ 
$font = rand(4,6); 
$x = $i/$this->len * $this->im_width + rand(1, $this->len); 
$this->get_y(); 
$this->get_randcolor(); 
imagestring($this->im, $font, $x, $this->y, substr($this->randnum, $i ,1), $this->randcolor); 
} 
$this->set_ext_line(); 
$this->set_ext_pixel(); 
header("content-type:image/png"); 
imagepng($this->im); 
imagedestroy($this->im); //释放图像资源 
} 
}//end class 
/**使用验证码类的方法: 
* $an = new Authnum(验证码长度,图片宽度,图片高度); 
* 实例化时不带参数则默认是四位的60*25尺寸的常规验证码图片 
* 表单页面检测验证码的方法,对比 $_SESSION[an] 是否等于 $_POST[验证码文本框ID] 
* 可选配置: 
* 1.验证码类型:$an->ext_num_type=1; 值为1是小写类型,2是大写类型,3是数字类型 
* 2.干扰点:$an->ext_pixel = false; 值为false表示不添加干扰点 
* 3.干扰线:$an->ext_line = false; 值为false表示不添加干扰线 
* 4.Y轴随机:$an->ext_rand_y = false; 值为false表示不支持图片Y轴随机 
* 5.图片背景:改变 $red $green $blue 三个成员变量的值即可 
**/ 
$an = new Authnum(); 
$an->ext_num_type=''; 
$an->ext_pixel = true; //干扰点 
$an->ext_line = false; //干扰线 
$an->ext_rand_y= true; //Y轴随机 
$an->green = 238; 
$an->create(); 
?>
PHP 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
织梦模板标记简介
Mar 11 PHP
php将数据库中的电话号码读取出来并生成图片
Aug 31 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
PHP使用memcache缓存技术提高响应速度的方法
Dec 26 PHP
PHP浮点数的一个常见问题
Mar 10 PHP
Laravel最佳分割路由文件(routes.php)的方式
Aug 04 PHP
php分页原理 分页代码 分页类制作教程
Sep 23 PHP
thinkPHP5.0框架URL访问方法详解
Mar 18 PHP
yii2中dropDownList实现二级和三级联动写法
Apr 26 PHP
PHP simplexml_import_dom()函数讲解
Feb 03 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
PHP项目开发中最常用的自定义函数整理
Dec 02 #PHP
PHP自动选择 连接本地还是远程数据库
Dec 02 #PHP
Mysql数据库操作类( 1127版,提供源码下载 )
Dec 02 #PHP
PHP分页函数代码(简单实用型)
Dec 02 #PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 #PHP
php小偷相关截取函数备忘
Nov 28 #PHP
php与paypal整合方法
Nov 28 #PHP
You might like
php获取qq用户昵称和在线状态(实例分析)
2013/10/27 PHP
Destoon实现多表查询示例
2014/08/21 PHP
php判断对象是派生自哪个类的方法
2015/06/20 PHP
获取网站跟路径的javascript代码(站点及虚拟目录)
2009/10/20 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(下:动画篇)
2010/03/24 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
js 加密压缩出现bug解决方案
2014/11/25 Javascript
程序员必知35个jQuery 代码片段
2015/11/05 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
AngularJS延迟加载html template
2016/07/27 Javascript
使用jQuery Ajax 请求webservice来实现更简练的Ajax
2016/08/04 Javascript
原生js实现中奖信息无间隙滚动效果
2017/01/18 Javascript
JS实现直接运行html代码的方法
2017/03/13 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
jQuery遍历节点方法汇总(推荐)
2017/05/13 jQuery
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
vue-prop父组件向子组件进行传值的方法
2018/03/01 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
微信小程序中悬浮窗功能的实现代码
2019/08/02 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
[01:59]深扒TI7聊天轮盘语音出处 1
2017/05/11 DOTA
[02:17]快乐加倍!DOTA2食人魔魔法师至宝+迎霜节活动上线
2019/12/22 DOTA
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
django自定义非主键自增字段类型详解(auto increment field)
2020/03/30 Python
pycharm 配置svn的图文教程(手把手教你)
2021/01/15 Python
HTML5 语义化结构化规范化
2008/10/17 HTML / CSS
计算机专业个人求职自荐信
2013/09/21 职场文书
服装行业创业计划书范文
2014/02/05 职场文书
建筑施工安全责任书
2014/07/24 职场文书
研究生就业推荐表导师评语
2014/12/31 职场文书
2016年基层党支部书记公开承诺书
2016/03/25 职场文书
MySQL中你可能忽略的COLLATION实例详解
2021/05/12 MySQL
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
Redis实现订单过期删除的方法步骤
2022/06/05 Redis
win10如何开启ahci模式?win10开启ahci模式详细操作教程
2022/07/23 数码科技
css弧边选项卡的项目实践
2023/05/07 HTML / CSS