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 相关文章推荐
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
php curl常见错误:SSL错误、bool(false)
Dec 28 PHP
解析PHP中intval()等int转换时的意外异常情况
Jun 21 PHP
php Session存储到Redis的方法
Nov 04 PHP
php中explode函数用法分析
Nov 15 PHP
php编写的抽奖程序中奖概率算法
May 14 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
Sep 25 PHP
基础的WordPress插件制作教程
Nov 24 PHP
Centos6.5和Centos7 php环境搭建方法
May 27 PHP
PHP中CheckBox多选框上传失败的代码写法
Feb 13 PHP
PHP使用PDO访问oracle数据库的步骤详解
Sep 29 PHP
PHP依赖注入原理与用法分析
Aug 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中call_user_func_array()函数的用法演示
2012/02/05 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
PHP-Java-Bridge使用笔记
2014/09/22 PHP
php导入大量数据到mysql性能优化技巧
2014/12/29 PHP
PHP生成静态HTML文档实现代码
2016/06/23 PHP
YII视图整合kindeditor扩展的方法
2016/07/13 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
php实现的错误处理封装类实例
2017/06/20 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
JS数组的赋值介绍
2014/03/10 Javascript
iframe的onreadystatechange事件在firefox下的使用
2014/04/16 Javascript
鼠标悬浮停留三秒后自动显示大图js代码
2014/09/09 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
javascript中setInterval的用法
2015/07/19 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
Vue实现自带的过滤器实例
2017/03/09 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
js中forEach,for in,for of循环的用法示例小结
2020/03/14 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
Python编程入门的一些基本知识
2015/05/13 Python
Python基于identicon库创建类似Github上用的头像功能
2017/09/25 Python
PyQt QCombobox设置行高的方法
2019/06/20 Python
django的聚合函数和aggregate、annotate方法使用详解
2019/07/23 Python
Python嵌入C/C++进行开发详解
2020/06/09 Python
html5-websocket基于远程方法调用的数据交互实现
2012/12/04 HTML / CSS
有趣的广告词
2014/03/18 职场文书
村党支部书记承诺书
2014/05/29 职场文书
创新社会管理心得体会
2014/09/12 职场文书
2014年房地产个人工作总结
2014/12/20 职场文书
大学考试作弊检讨书
2015/05/06 职场文书
2016暑期校本培训心得体会
2016/01/08 职场文书
筑梦中国心得体会
2016/01/18 职场文书
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android