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 10 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
Mar 18 PHP
php 判断网页是否是utf8编码的方法
Jun 06 PHP
PHP多线程类及用法实例
Dec 03 PHP
php实现图片局部打马赛克的方法
Feb 11 PHP
Zend Framework实现将session存储在memcache中的方法
Mar 22 PHP
thinkPHP中_initialize方法实例分析
Dec 05 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
PHP 多任务秒级定时器的实现方法
May 13 PHP
PHP精确到毫秒秒杀倒计时实例详解
Mar 14 PHP
php 的多进程操作实践案例分析
Feb 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里的JS打印函数
2006/10/09 PHP
c#中的实现php中的preg_replace
2009/12/21 PHP
PHP运行出现Notice : Use of undefined constant 的完美解决方案分享
2012/03/05 PHP
PHP简单实现无限级分类的方法
2016/05/13 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
改写一个简单的菜单 弹性大小
2010/12/02 Javascript
js动态调用css属性的小规律及实例说明
2013/12/28 Javascript
node.js入门教程迷你书、node.js入门web应用开发完全示例
2014/04/06 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
js和jQuery设置Opacity半透明 兼容IE6
2016/05/24 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
JavaScript必知必会(七)js对象继承
2016/06/08 Javascript
手机图片预览插件photoswipe.js使用总结
2016/08/25 Javascript
jQuery序列化表单成对象的简单实现
2016/11/29 Javascript
原生JS实现《别踩白块》游戏(兼容IE)
2017/02/20 Javascript
Node.js 中exports 和 module.exports 的区别
2017/03/14 Javascript
Vue 开发音乐播放器之歌手页右侧快速入口功能
2018/08/08 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[01:07:47]Secret vs Optic Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[25:59]Newbee vs TNC 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:32]TI珍贵瞬间系列(一)
2020/08/26 DOTA
python字符串排序方法
2014/08/29 Python
python实现多线程抓取知乎用户
2016/12/12 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
轻松理解Python 中的 descriptor
2017/09/15 Python
python ansible服务及剧本编写
2017/12/29 Python
python GUI库图形界面开发之PyQt5选项卡控件QTabWidget详细使用方法与实例
2020/03/01 Python
如何基于Python按行合并两个txt
2020/11/03 Python
详解css3 flex弹性盒自动铺满写法
2020/09/17 HTML / CSS
深入探究HTML5的History API
2015/07/09 HTML / CSS
Viking Direct爱尔兰:办公用品和家具
2019/11/21 全球购物
投标邀请书范文
2014/01/31 职场文书
计划生育目标责任书
2015/05/09 职场文书
HTML5来实现本地文件读取和写入的实现方法
2021/05/25 HTML / CSS