0

0

PHP验证码处理源代码

php中文网

php中文网

发布时间:2016-06-06 19:40:41

|

1488人浏览过

|

来源于php中文网

原创

?php /** * 安全的 验证 码要: 验证 码文字扭曲、旋转,使用不同字体,添加干扰码。 * @原作者: 流水孟春 cmpan@qq.com * @修 改: flymorn www.piaoyi.org **/ class YL_Security_Secoder { // 验证 码的session的下标 public static $seKey = 'verify_py

/**
* 安全的验证码要:验证码文字扭曲、旋转,使用不同字体,添加干扰码。
* @原作者: 流水孟春
* @修 改: flymorn
**/
class yl_security_secoder {
//验证码的session的下标
public static $sekey = 'verify_py'; //验证码关键字
public static $expire = 3000; // 验证码过期时间(s)
//验证码中使用的字符,01io容易混淆,不用
public static $codeset = '3456789abcdefghjklmnpqrtuvwxy';
public static $fontsize = 26; // 验证码字体大小(px)
public static $usecurve = true; // 是否画混淆曲线
public static $usenoise = true; // 是否添加杂点
public static $imageh = 0; // 验证码图片宽
public static $imagel = 0; // 验证码图片长
public static $length = 4; // 验证码位数
public static $bg = array(243, 251, 254); // 背景

protected static $_image = null; // 验证码图片实例
protected static $_color = null; // 验证码字体颜色

/**
* 输出验证码并把验证码的值保存的session中
*/
public static function entry() {
// 图片宽(px)
self::$imagel || self::$imagel = self::$length * self::$fontsize * 1.5 + self::$fontsize*1.5;
// 图片高(px)
self::$imageh || self::$imageh = self::$fontsize * 2;
// 建立一幅 self::$imagel x self::$imageh 的图像
self::$_image = imagecreate(self::$imagel, self::$imageh);
// 设置背景
imagecolorallocate(self::$_image, self::$bg[0], self::$bg[1], self::$bg[2]);
// 验证码字体随机颜色
self::$_color = imagecolorallocate(self::$_image, mt_rand(1,120), mt_rand(1,120), mt_rand(1,120));
// 验证码使用随机字体,保证目录下有这些字体集
$ttf = dirname(__file__) . '/ttfs/t' . mt_rand(1, 10) . '.ttf';

if (self::$usenoise) {
// 绘杂点
self::_writenoise();
}
if (self::$usecurve) {
// 绘干扰线
self::_writecurve();
}

// 绘验证
$code = array(); // 验证
$codenx = 0; // 验证码第n个字符的左边距
for ($i = 0; $i<:> $code[$i] = self::$codeset[mt_rand(0, 28)];
$codenx += mt_rand(self::$fontsize*1.2, self::$fontsize*1.6);
// 写一个验证码字符
imagettftext(self::$_image, self::$fontsize, mt_rand(-40, 70), $codenx, self::$fontsize*1.5, self::$_color, $ttf, $code[$i]);
}

// 保存验证
isset($_session) || session_start();
$_session[self::$sekey]['code'] = join('', $code); // 把验证码保存到session, 验证时注意是大写
$_session[self::$sekey]['time'] = time(); // 验证码创建时间

header('pragma: no-cache');
header("content-type: image/jpeg");

// 输出图像
imagejpeg(self::$_image);
imagedestroy(self::$_image);
}

/**
* 画一条由两条连在一起构成的随机正弦函数曲线作干扰线(你可以改成更帅的曲线函数)
* 正弦型函数解析式:y=asin(ωx+φ)+b
* 各常数值对函数图像的影响:
* a:决定峰值(即纵向拉伸压缩的倍数)
* b:表示波形在y轴的位置关系或纵向移动距离(上加下减)
* φ:决定波形与x轴位置关系或横向移动距离(左加右减)
* ω:决定周期(最小正周期t=2π/∣ω∣)
*/
protected static function _writecurve() {
$a = mt_rand(1, self::$imageh/2); // 振幅
$b = mt_rand(-self::$imageh/4, self::$imageh/4); // y轴方向偏移量
$f = mt_rand(-self::$imageh/4, self::$imageh/4); // x轴方向偏移量
$t = mt_rand(self::$imageh*1.5, self::$imagel*2); // 周期
$w = (2* m_pi)/$t;

$px1 = 0; // 曲线横坐标起始位置
$px2 = mt_rand(self::$imagel/2, self::$imagel * 0.667); // 曲线横坐标结束位置
for ($px=$px1; $px if ($w!=0) {
$py = $a * sin($w*$px + $f)+ $b + self::$imageh/2; // y = asin(ωx+φ) + b
$i = (int) ((self::$fontsize - 6)/4);
while ($i > 0) {
imagesetpixel(self::$_image, $px + $i, $py + $i, self::$_color);
//这里画像素点比imagettftext和imagestring性能要好很多
$i--;
}
}
}

$a = mt_rand(1, self::$imageh/2); // 振幅
$f = mt_rand(-self::$imageh/4, self::$imageh/4); // x轴方向偏移量
$t = mt_rand(self::$imageh*1.5, self::$imagel*2); // 周期
$w = (2* m_pi)/$t;
$b = $py - $a * sin($w*$px + $f) - self::$imageh/2;
$px1 = $px2;
$px2 = self::$imagel;
for ($px=$px1; $px if ($w!=0) {
$py = $a * sin($w*$px + $f)+ $b + self::$imageh/2; // y = asin(ωx+φ) + b
$i = (int) ((self::$fontsize - 8)/4);
while ($i > 0) {
imagesetpixel(self::$_image, $px + $i, $py + $i, self::$_color);
//这里(while)循环画像素点比imagettftext和imagestring用字体大小一次画出
//的(不用while循环)性能要好很多
$i--;
}
}
}
}

/**
* 画杂点
* 往图片上写不同颜色的字母或数字
*/
protected static function _writenoise() {
for($i = 0; $i //杂点颜色
$noisecolor = imagecolorallocate(
self::$_image,
mt_rand(150,225),
mt_rand(150,225),
mt_rand(150,225)
);
for($j = 0; $j // 绘杂点
imagestring(
self::$_image,
5,
mt_rand(-10, self::$imagel),
mt_rand(-10, self::$imageh),
self::$codeset[mt_rand(0, 28)], // 杂点文本为随机的字母或数字
$noisecolor
);
}
}
}
}

//调用上面定义的验证码类 来生产验证
YL_Security_Secoder::$useNoise = true; //是否启用噪点
YL_Security_Secoder::$useCurve = true; //是否启用干扰曲线
YL_Security_Secoder::entry();

?>

 

Ke361开源淘宝客系统
Ke361开源淘宝客系统

Ke361是一个开源的淘宝客系统,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制, 融合了模块化、驱动化和插件化的设计理念于一体,以帮助想做淘宝客而技术水平不高的朋友。突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。K

下载

还有一个tts的文件夹用于放字体文件

立即学习PHP免费学习笔记(深入)”;

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

150

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

88

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

90

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

61

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

493

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

16

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

12

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

5

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 8.2万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号