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 相关文章推荐
开发大型 PHP 项目的方法
Jan 02 PHP
PHP开发中四种查询返回结果分析
Jan 02 PHP
php操作JSON格式数据的实现代码
Dec 24 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
Jan 17 PHP
用mysql_fetch_array()获取当前行数据的方法详解
Jun 05 PHP
一个比较不错的PHP日历类分享
Nov 18 PHP
为PHP5.4开启Zend OPCode缓存
Dec 26 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
PHP如何将log信息写入服务器中的log文件
Jul 29 PHP
PHP常用的小程序代码段
Nov 14 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
设定php简写功能的方法
Nov 28 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编程实现获取excel文档内容的代码实例
2011/06/28 PHP
浅析php中三个等号(===)和两个等号(==)的区别
2013/08/06 PHP
laravel 多图上传及图片的存储例子
2019/10/14 PHP
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
JavaScript的Module模式编程深入分析
2013/08/13 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
JavaScript实现下拉列表框数据增加、删除、上下排序的方法
2015/08/11 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
Express的路由详解
2015/12/10 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
Webpack执行命令参数详解
2017/06/17 Javascript
Vue实战之vue登录验证的实现代码
2017/10/31 Javascript
解决使用layui对select append元素无效或者未及时更新的问题
2019/09/18 Javascript
JS实现纵向轮播图(初级版)
2020/01/18 Javascript
vue中echarts引入中国地图的案例
2020/07/28 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
vue路由的配置和页面切换详解
2020/09/09 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
详解Python中heapq模块的用法
2016/06/28 Python
python 实现list或string按指定分段
2019/12/25 Python
Python操作Excel把数据分给sheet
2020/05/20 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
美国知名玩具品牌:Melissa & Doug
2016/08/16 全球购物
美国最大的宠物药店:1-800-PetMeds
2016/10/02 全球购物
军训生自我鉴定范文
2013/12/27 职场文书
求职信模板怎么做
2014/01/26 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
北体毕业生求职信
2014/02/28 职场文书
离职证明范本(5篇)
2014/09/19 职场文书
运动会跳远广播稿
2015/08/19 职场文书
小数乘法教学反思
2016/02/22 职场文书
go语言中GOPATH GOROOT的作用和设置方式
2021/05/05 Golang
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
Python中的socket网络模块介绍
2022/07/23 Python