PHP高自定义性安全验证码代码


Posted in PHP onNovember 27, 2011
<?php 
public function captcha(){ 
$font_dir = $_SERVER ["DOCUMENT_ROOT"] . "your_ttf_file.ttf"; // 字体库 
$img_w = 58; // 设置图片宽 
$img_h = 20; // 设置图片高 
$font_size = 11; // 字体大小 
$angle_l = -10; // 左偏角 
$angle_r = 10; // 右偏角 
$code_str = "ABCDEFGHJKLMNPQRSTUVWXYZ36"; 
$word_len = 4; // 验证码位数 
$padding = 5; // 每两个文字之间间隔 
$margin = 2; // 左侧边距 
$base_line = 15; // 文字基线位置 
$base_line_offset = 2; // 基准线偏移量 
$pixel_num = 3; // 杂点数目基数 
$pixel_color= 8; // 杂点只有 $pixel_color 种颜色 总的杂点数为$pixel_num*$pixel_color 
$noise_font_size = 1; // 杂点字体大小 
$session_key= "my.xoyo_captcha"; //自定义session键名 header("Cache-Control: no-cache, must-revalidate"); 
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); 
header("Pragma: no-cache"); 
header("Cache-control: private"); 
header('Content-Type: image/png'); 
session_start(); 
$word = ""; 
$code_str_len = strlen($code_str) - 1; 
for ($i = 0; $i < $word_len; $i++) { 
$word.= $code_str[rand(0, $code_str_len)]; 
} 
$_SESSION [$session_key] = strtolower($word); 
$image = imagecreatetruecolor($img_w, $img_h); 
imagefilledrectangle($image, 0, 0, $img_w - 1, $img_h - 1, imagecolorallocate($image, mt_rand(235, 255), mt_rand(235, 255), mt_rand(235, 255))); 
//绘制杂点 
for($i = 0; $i < $pixel_color; $i++){ 
$noise_color = imagecolorallocate( $image, mt_rand(150,225), mt_rand(150,225), mt_rand(150,225) ); 
for($j = 0; $j < $pixel_num; $j++) { 
imagestring( $image, $noise_font_size, mt_rand(-10, $img_w), mt_rand(-10, $img_h), $code_str[mt_rand(0, $code_str_len)], $noise_color ); 
} 
} 
//绘制文字 
for ($i = 0; $i < $word_len; ++$i) { 
$color = imagecolorallocate($image, mt_rand(0, 100), mt_rand(20, 120), mt_rand(50, 150)); 
imagettftext($image, $font_size, mt_rand($angle_l, $angle_r), $margin, mt_rand($base_line-$base_line_offset, $base_line+$base_line_offset), $color, $font, mb_substr($word, $i, 1, 'utf-8')); 
$margin += (imagefontwidth($font_size) + $padding); 
} 
imagepng($image); 
imagedestroy($image); 
exit; 
}
PHP 相关文章推荐
PHP5在Apache下的两种模式的安装
Sep 05 PHP
Windows PHP5和Apache的安装与配置
Jun 08 PHP
php 无限级分类学习参考之对ecshop无限级分类的解析 带详细注释
Mar 23 PHP
探讨方法的重写(覆载)详解
Jun 08 PHP
PHP获取MAC地址的具体实例
Dec 13 PHP
php读取文件内容的三种可行方法示例介绍
Feb 08 PHP
php 生成自动创建文件夹并上传文件的示例代码
Mar 07 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
PHP图像处理类库及演示分享
May 17 PHP
PHP7之Mongodb API使用详解
Dec 26 PHP
thinkPHP框架乐观锁和悲观锁实例分析
Oct 30 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 #PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
Nov 25 #PHP
php 团购折扣计算公式
Nov 24 #PHP
php中$_REQUEST、$_POST、$_GET的区别和联系小结
Nov 23 #PHP
打造超酷的PHP数据饼图效果实现代码
Nov 23 #PHP
DISCUZ在win2003环境下 Unable to access ./include/common.inc.php in... 的问题终极解决方案
Nov 21 #PHP
一个PHP的QRcode类与大家分享
Nov 13 #PHP
You might like
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
thinkphp3.2.2实现生成多张缩略图的方法
2014/12/19 PHP
javascript css在IE和Firefox中区别分析
2009/02/18 Javascript
jquery lazyload延迟加载技术的实现原理分析
2011/01/24 Javascript
jquery 结合C#后台的数组对文章的关键字自动添加链接的代码
2011/07/15 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
浅谈angularjs依赖服务注入写法的注意点
2017/04/24 Javascript
Vue父子模版传值及组件传值的三种方法
2017/11/27 Javascript
vue.js中引入vuex储存接口数据及调用的详细流程
2017/12/14 Javascript
vue-router history模式下的微信分享小结
2018/07/05 Javascript
PM2自动部署代码步骤流程总结
2018/12/10 Javascript
详解vue组件中使用路由方法
2019/02/12 Javascript
详解VUE前端按钮权限控制
2019/04/26 Javascript
vue移动端使用canvas签名的实现
2020/01/15 Javascript
webpack3.0升级4.0的方法步骤
2020/04/02 Javascript
[03:40]2014DOTA2国际邀请赛 B神专访:躲箭真的很难
2014/07/13 DOTA
Python多进程原理与用法分析
2018/08/21 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
python之yield和Generator深入解析
2019/09/18 Python
解决python 读取 log日志的编码问题
2019/12/24 Python
Python 过滤错误log并导出的实例
2019/12/26 Python
详解django中Template语言
2020/02/22 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
使用HTML5 Canvas API中的clip()方法裁剪区域图像
2016/03/25 HTML / CSS
小学体育教学反思
2014/01/31 职场文书
项目负责人任命书
2014/06/04 职场文书
护理学专业求职信
2014/06/29 职场文书
2015年第十五个全民国防教育日宣传活动方案
2015/05/06 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
nginx 配置缓存
2022/05/11 Servers