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中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
第十五节--Zend引擎的发展
Nov 16 PHP
php数组一对一替换实现代码
Aug 31 PHP
smarty半小时快速上手入门教程
Oct 27 PHP
PHP实现递归复制整个文件夹的类实例
Aug 03 PHP
php+mysql实现无限级分类
Nov 11 PHP
php求数组全排列,元素所有组合的方法
May 05 PHP
php简单复制文件的方法
May 09 PHP
PHP实现电商订单自动确认收货redis队列
May 17 PHP
php使用curl下载指定大小的文件实例代码
Sep 30 PHP
PHP 图片合成、仿微信群头像的方法示例
Oct 25 PHP
laravel框架邮箱认证实现方法详解
Nov 22 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多图上传小程序代码
2011/07/17 PHP
PHP判断表单复选框选中状态完整例子
2014/06/24 PHP
使用WAMP搭建PHP本地开发环境
2017/05/10 PHP
PHP微信H5支付开发实例
2018/07/25 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
5种处理js跨域问题方法汇总
2014/12/04 Javascript
javascript中利用柯里化函数实现bind方法
2016/04/29 Javascript
xmlplus组件设计系列之树(Tree)(9)
2017/05/02 Javascript
js实现鼠标拖拽多选功能示例
2017/08/01 Javascript
JS获取日期的方法实例【昨天,今天,明天,前n天,后n天的日期】
2017/09/28 Javascript
Vue 全家桶实现移动端酷狗音乐功能
2018/11/16 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
JS使用new操作符创建对象的方法分析
2019/05/30 Javascript
微信小程序实现点击图片放大预览
2019/10/21 Javascript
JavaScript this使用方法图解
2020/02/04 Javascript
JS实现打砖块游戏
2020/02/14 Javascript
jQuery HTML css()方法与css类实例详解
2020/05/20 jQuery
从0到1学习JavaScript编写贪吃蛇游戏
2020/07/28 Javascript
Python的“二维”字典 (two-dimension dictionary)定义与实现方法
2016/04/27 Python
一张图带我们入门Python基础教程
2017/02/05 Python
Python简单生成随机数的方法示例
2018/03/31 Python
Python统计python文件中代码,注释及空白对应的行数示例【测试可用】
2018/07/25 Python
使用python绘制二元函数图像的实例
2019/02/12 Python
利用Python实现微信找房机器人实例教程
2019/03/10 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
德国低价购买灯具和家具网站:Style-home.de
2016/11/25 全球购物
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
英文留学推荐信范文
2014/01/25 职场文书
网络文明传播志愿者活动方案
2014/08/20 职场文书
2015大学生求职信范文
2015/03/20 职场文书
教师听课学习心得体会
2016/01/15 职场文书
甜美蛋糕店的创业计划书模板,拿来即用!
2019/08/21 职场文书
vue项目如何打包之项目打包优化(让打包的js文件变小)
2022/04/30 Vue.js