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中global和$GLOBALS[]的分析之一
Feb 02 PHP
解析wamp5下虚拟机配置文档
Jun 27 PHP
PHP文件去掉PHP注释空格的函数分析(PHP代码压缩)
Jul 02 PHP
如何使用PHP批量去除文件UTF8 BOM信息
Aug 05 PHP
PHP限制页面只能在微信自带浏览器访问的代码
Jan 15 PHP
使用PHP破解防盗链图片的一个简单方法
Jun 07 PHP
ThinkPHP实现带验证码的文件上传功能实例
Nov 01 PHP
laravel 5 实现模板主题功能(续)
Mar 02 PHP
PHP设置进度条的方法
Jul 08 PHP
php中static和const关键字用法分析
Dec 07 PHP
浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)
Mar 14 PHP
PHP实现八皇后算法
May 06 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正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
PHP数组去重比较快的实现方式
2016/01/19 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
JavaScript实现检查页面上的广告是否被AdBlock屏蔽了的方法
2014/11/03 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
详解Vue使用命令行搭建单页面应用
2017/05/24 Javascript
纯js实现画一棵树的示例
2017/09/05 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
bootstrap select下拉搜索插件使用方法详解
2017/11/23 Javascript
angular2中Http请求原理与用法详解
2018/01/11 Javascript
详解TypeScript+Vue 插件 vue-class-component的使用总结
2019/02/18 Javascript
原生JS实现微信通讯录
2020/06/18 Javascript
vue路由分文件拆分管理详解
2020/08/13 Javascript
vue路由结构可设一层方便动态添加路由操作
2020/08/31 Javascript
JS实现超级好看的鼠标小尾巴特效
2020/12/01 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
Python正则简单实例分析
2017/03/21 Python
win8下python3.4安装和环境配置图文教程
2018/07/31 Python
pytorch+lstm实现的pos示例
2020/01/14 Python
浅谈keras.callbacks设置模型保存策略
2020/06/18 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Dr. Martens马汀博士官网:马丁靴始祖品牌
2016/10/15 全球购物
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
英国家居用品和床上用品零售商:P&B Home
2020/01/16 全球购物
夜大毕业生自我评价分享
2013/11/10 职场文书
爱情检讨书大全
2014/01/21 职场文书
护理助产毕业生的求职信
2014/03/02 职场文书
幼儿园毕业典礼主持词
2014/03/21 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
合伙协议书范本
2014/04/21 职场文书
MySQL表锁、行锁、排它锁及共享锁的使用详解
2022/04/02 MySQL
升级 Win11 还是坚守 Win10?微软 Win11 新系统缺失功能大盘点
2022/04/05 数码科技
利用Python脚本写端口扫描器socket,python-nmap
2022/07/23 Python