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实现文件上传二法
Oct 09 PHP
Email+URL的判断和自动转换函数
Oct 09 PHP
『PHP』PHP截断函数mb_substr()使用介绍
Apr 22 PHP
php判断数组元素中是否存在某个字符串的方法
Jun 14 PHP
PHP中file_get_contents高?用法实例
Sep 24 PHP
PHP把MSSQL数据导入到MYSQL的方法
Dec 27 PHP
功能强大的PHP图片处理类(水印、透明度、旋转)
Oct 21 PHP
Android App中DrawerLayout抽屉效果的菜单编写实例
Mar 21 PHP
php实现的一段简单概率相关代码
May 30 PHP
功能强大的PHP POST提交数据类
Jul 15 PHP
php微信公众号开发(3)php实现简单微信文本通讯
Dec 15 PHP
PHP copy函数使用案例代码解析
Sep 01 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中die(),exit(),return的区别
2013/06/20 PHP
php命令行使用方法和命令行参数说明
2014/04/08 PHP
摘自织梦CMS中的图片处理类
2015/08/08 PHP
PHP实现的观察者模式实例
2017/06/21 PHP
购物车实现的几种方式优缺点对比
2018/05/02 PHP
IE innerHTML,outerHTML所引起的问题
2009/06/04 Javascript
jquery 选择器部分整理
2009/10/28 Javascript
如何在一个页面显示多个百度地图
2013/04/07 Javascript
给事件响应函数传参数的四种方式小结
2013/12/05 Javascript
JS实现刷新父页面不弹出提示框的方法
2016/06/22 Javascript
AngularJS删除路由中的#符号的方法
2016/09/20 Javascript
Angular 2应用的8个主要构造块有哪些
2016/10/17 Javascript
JS中setTimeout和setInterval的最大延时值详解
2017/02/13 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
Node接收电子邮件的实例代码
2017/07/21 Javascript
checkbox:click事件触发span元素内容改变的方法
2017/09/11 Javascript
Angular自定义组件实现数据双向数据绑定的实例
2017/12/11 Javascript
JS抛物线动画实例制作
2018/02/24 Javascript
浅谈Vue路由快照实现思路及其问题
2018/06/07 Javascript
Vue.Draggable拖拽功能的配置使用方法
2020/07/29 Javascript
python2.7实现FTP文件下载功能
2018/04/15 Python
Django密码系统实现过程详解
2019/07/19 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
python 求定积分和不定积分示例
2019/11/20 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
对tensorflow中tf.nn.conv1d和layers.conv1d的区别详解
2020/02/11 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
一款利用css3的鼠标经过动画显示详情特效的实例教程
2014/12/29 HTML / CSS
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
英语专业应届生求职信范文
2013/11/15 职场文书
工作说明书范文
2014/05/07 职场文书
关于孝道的演讲稿
2014/05/21 职场文书
应届大专生求职信
2014/06/26 职场文书
单位工作证明
2014/10/07 职场文书
如何解决springcloud feign 首次调用100%失败的问题
2021/06/23 Java/Android