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 相关文章推荐
MySQL GBK→UTF-8编码转换
May 24 PHP
php下使用以下代码连接并测试
Apr 09 PHP
基于xcache的配置与使用详解
Jun 18 PHP
php一行代码获取文件后缀名实例分析
Nov 12 PHP
php基于表单密码验证与HTTP验证用法实例
Jan 06 PHP
PHP创建PowerPoint2007文档的方法
Dec 10 PHP
Yii实现的多级联动下拉菜单
Jul 13 PHP
php array_values 返回数组的值实例详解
Nov 17 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
PHP实现的redis主从数据库状态检测功能示例
Jul 20 PHP
基于swoole实现多人聊天室
Jun 14 PHP
PHP strripos函数用法总结
Feb 11 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
php函数重载的替代方法--伪重载详解
2015/05/08 PHP
PHP实现的简单缓存类
2015/07/29 PHP
PHP的Yii框架中YiiBase入口类的扩展写法示例
2016/03/17 PHP
php的socket编程详解
2016/11/20 PHP
php实现支持中文的文件下载功能示例
2017/08/30 PHP
ajax异步刷新实现更新数据库
2012/12/03 Javascript
jQuery实现用方向键控制层的上下左右移动
2013/01/13 Javascript
toggle()隐藏问题的解决方法
2014/02/17 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
js淡入淡出的图片轮播效果代码分享
2015/08/24 Javascript
使用Sticky组件实现带sticky效果的tab导航和滚动导航的方法
2016/03/22 Javascript
easyui-combobox 实现简单的自动补全功能示例
2016/11/08 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
BootStrap入门学习第一篇
2017/08/28 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
Layui 设置select下拉框自动选中某项的方法
2018/08/14 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
2019/04/02 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
详解js常用分割取字符串的方法
2019/05/15 Javascript
nodejs中实现修改用户路由功能
2019/05/24 NodeJs
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
python网络编程学习笔记(五):socket的一些补充
2014/06/09 Python
python冒泡排序简单实现方法
2015/07/09 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
Python实现解析Bit Torrent种子文件内容的方法
2017/08/29 Python
Python实现检测文件MD5值的方法示例
2018/04/11 Python
Django密码存储策略分析
2020/01/09 Python
h5实现获取用户地理定位的实例代码
2017/07/17 HTML / CSS
Holiday Inn中国官网:IHG旗下假日酒店预订
2018/04/08 全球购物
职位说明书范文
2014/05/07 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
《钢铁是怎样炼成的》高中读后感
2019/08/07 职场文书
mysql死锁和分库分表问题详解
2021/04/16 MySQL