这是个验证码类,我现在设置的大小是90*30的,大家可以根据需要具体修改,不过,修改了图片大小以后,需要根据情况具体修改些。代码说明
// 绘验证码
$code = array(); // 验证码
$codeNX =-20; // 验证码第N个字符的左边距,如果图片大小变化,需要修改
for ($i = 0; $i<self::$length; $i++) {
$code[$i] = self::$codeSet[mt_rand(0, 27)];
$codeNX += mt_rand(self::$fontSize, self::$fontSize);
// 写一个验证码字符,具体修改看这个函数的功能
imagettftext(self::$_image, self::$fontSize*0.65, mt_rand(-40, 40), $codeNX, self::$fontSize, self::Getcolor(), $ttf, $code[$i]);
//imagettftext()中self::$fontSize大小修改,改变字母上下的幅度,具体可以这样self::$fontSize*0.9,
}
<?php
/**
* 安全验证码
*
* 安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码
*
*/
class Authcode {
/**
* 验证码的session的下标
*
* @var string
*/
public static $seKey = 'authcode';
public static $expire = 3000; // 验证码过期时间(s)
/**
* 验证码中使用的字符,01IO容易混淆,建议不用
*
* @var string
*/
public static $codeSet = '346789ABCDEFGHJKLMNPQRTUVWXY';
public static $fontSize = 20; // 验证码字体大小(px)
public static $useCurve = true; // 是否画混淆曲线
public static $useNoise = true; // 是否添加杂点
public static $imageH = 25; // 验证码图片宽
public static $imageW = 75; // 验证码图片长
public static $length = 4; // 验证码位数
public static $font = 1; //选择字体
protected static $_image = null; // 验证码图片实例
protected static $_color = null; // 验证码字体颜色
/**
* 验证码字体颜色,可以设定为固定,也可以随机,可以所有为一个颜色也可以每个字符为一个颜色
*
*/
public static function Getcolor(){
$fontcolor = imagecolorallocate(self::$_image, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));
return $fontcolor;
}
/*
* 可以根据自己需要来添加或者减少,也可以指定单一的背景颜色
*/
public static function Background(){
$color = array(
array(240,255,255),
array(245,245,245),
array(255,248,220),
array(252,230,201),
array(240,255,240),
array(250,255,240),
array(250,240,230),
array(255,245,238),
array(255,250,250)
);
$m = rand(0,5);
imagecolorallocate(self::$_image, $color[$m][0], $color[$m][1], $color[$m][2]);
}
/**
* 输出验证码并把验证码的值保存的session中
* 验证码保存到session的格式为: $_SESSION[self::$seKey] = array('code' => '验证码值', 'time' => '验证码创建时间');
*/
public static function Build() {
// 图片宽(px)
self::$imageW || self::$imageW = self::$length * self::$fontSize + self::$fontSize;
// 图片高(px)
self::$imageH || self::$imageH = self::$fontSize * 3;
// 建立一幅 self::$imageW x self::$imageH 的图像
self::$_image = imagecreate(self::$imageW, self::$imageH);
// 设置背景
self::Background();
// 验证码使用字体
$ttf = 'style/images/' . self::$font . '.ttf';
if (self::$useNoise) {
// 绘杂点
self::writeNoise();
}
// 绘验证码
$code = array(); // 验证码
$codeNX =-20; // 验证码第N个字符的左边距
for ($i = 0; $i<self::$length; $i++) {
$code[$i] = self::$codeSet[mt_rand(0, 27)];
$codeNX += mt_rand(self::$fontSize, self::$fontSize);
// 写一个验证码字符,具体修改看这个函数的功能
imagettftext(self::$_image, self::$fontSize*0.6, mt_rand(-40, 40), $codeNX, self::$fontSize*0.9, self::Getcolor(), $ttf, $code[$i]);
}
// 保存验证码
// isset($_SESSION) || session_start();
$_SESSION[self::$seKey] = join('', $code); // 把校验码保存到session
$_SESSION['out_time'] = time(); // 验证码创建时间
header('Cache-Control: private, max-age=0, no-store, no-cache, must-revalidate');
header('Cache-Control: post-check=0, pre-check=0', false);
header('Pragma: no-cache');
header("content-type: image/png");
// 输出图像
imagepng(self::$_image);
imagedestroy(self::$_image);
}
/**
* 画杂点
* 往图片上写不同颜色的字母或数字
*/
protected static function writeNoise() {
for($i = 0; $i < 5; $i++){
//杂点颜色
$noiseColor = imagecolorallocate(
self::$_image,
mt_rand(100,200),
mt_rand(100,200),
mt_rand(100,200)
);
for($j = 0; $j < 3; $j++) {
// 绘杂点($j<? 来调整杂点个数)
imagestring(
self::$_image,
3, //背景字体的大小
mt_rand(-5, self::$imageW),
mt_rand(-5, self::$imageH),
self::$codeSet[mt_rand(1, 27)], // 杂点文本为随机的字母或数字
$noiseColor
);
}
}
}
/**
* 验证验证码是否正确
*
* @param string $code 用户验证码
* @param bool 用户验证码是否正确
*/
public static function check($code) {
$code = strtoupper($code);
// 验证码不能为空
if(empty($code) || empty($_SESSION[self::$seKey])) {
return false;
}
// session 过期
if(time() - $_SESSION['out_time'] > self::$expire) {
unset($_SESSION[self::$seKey]);
return false;
}
if($code == $_SESSION[self::$seKey]) {
return true;
}
return false;
}
}
分享到:
相关推荐
漂亮的php验证码,包含支持多字体,字母验证码,数字验证码,经过改进的支持多字体的php验证码,很清爽的感觉,也很大气,适合做商业网站开发插件,同时过滤了几个容易混淆的数字与字母。
好用的php验证码类,具体用法在代码的注释里面。感兴趣的朋友们可以下载下来,用到自己的项目中。
PHP验证码的应用示例PHP验证码的应用示例PHP验证码的应用示例
漂亮的php 验证码 使用运行page.php
php 验证码 源码 范例 简单 基础 入门
php中文验证码类 php验证码类 php验证码
一个简单的php验证码程序,生成的验证码存在session中,未加密,大家可以自己加密。
php验证码生成类
php验证码类,可以根据自己项目情况设置文字长度,大小
php 验证码 简单、实用 php 验证码 简单、实用
一个php验证码样式类,PHP生成验证码没有想象中的难,实例化对象,并设置验证码图片的宽、高和验证码的长度。创建图片,干扰颜色,干扰点,干扰线,验证码写入图片。
简单完整的PHP验证码,PHP验证码,数字结合英文。
实用的php验证码类
推荐一个好用的php验证码类,$image->config('宽度','高度','字符个数','验证码session索引'),默认是:宽80 高20 字符数4 验证码session索引captcha_code 。
PHP验证码图片生成程序,一起研究一下吧
一个PHP验证码小实例,非常试用与初学者,下载试试看吧,
分享一个php验证码生成类代码,通过该方法向浏览器输出图像,创建图像背景,设置干扰元素,向图像中随机画出文本,输出图像。
php验证码类
定制化的php验证码类 创建验证码图像: 建立画布(__construct函数) 设置画布背景($this->set_bgcolor();) 获取随机字符串($this->get_randnum ();) 文字写到图片上(imagestring函数)...
自制php验证码(php类),兼容中英文混合,多种模式选择,可支持纯色和随机色彩,支持杂色,线条混淆,可自定义,可扩展,如果觉得可以,在博客http://www.xinboys.com支持一下,谢谢