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设计模式 Factory(工厂模式)
Jun 26 PHP
用php解析html的实现代码
Aug 08 PHP
php数组函数序列之in_array() 查找数组值是否存在
Oct 29 PHP
二招解决php乱码问题
Mar 25 PHP
php根据年月获取季度的方法
Mar 31 PHP
PHP实现在线阅读PDF文件的方法
Jun 17 PHP
PHP+Apache+Mysql环境搭建教程
Aug 01 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
Nov 28 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
Jun 30 PHP
PHP容器类的两种实现方式示例
Jul 24 PHP
设定php简写功能的方法
Nov 28 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 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
全国FM电台频率大全 - 10 江苏省
2020/03/11 无线电
一周学会PHP(视频)Http下载
2006/12/12 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
jQuery生成asp.net服务器控件的代码
2010/02/04 Javascript
js下判断 iframe 是否加载完成的完美方法
2010/10/26 Javascript
EXTJS记事本 当CompositeField遇上RowEditor
2011/07/31 Javascript
JavaScript验证图片类型(扩展名)的函数分享
2014/05/05 Javascript
JS实现FLASH幻灯片图片切换效果的方法
2015/03/04 Javascript
JavaScript判断是否是微信浏览器
2016/06/13 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
微信小程序url与token设置详解
2017/09/26 Javascript
vue 中基于html5 drag drap的拖放效果案例分析
2018/11/01 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
jQuery+ajax实现文件上传功能
2020/12/22 jQuery
python爬取亚马逊书籍信息代码分享
2017/12/09 Python
对python 矩阵转置transpose的实例讲解
2018/04/17 Python
浅谈django三种缓存模式的使用及注意点
2018/09/30 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
python使用xlrd模块读取xlsx文件中的ip方法
2019/01/11 Python
python2.7使用plotly绘制本地散点图和折线图
2019/04/02 Python
Python实现Mysql数据统计及numpy统计函数
2019/07/15 Python
PyTorch 对应点相乘、矩阵相乘实例
2019/12/27 Python
python模拟斗地主发牌
2020/04/22 Python
python中pop()函数的语法与实例
2020/12/01 Python
解决PDF 转图片时丢文字的一种可能方式
2021/03/04 Python
HTML5 标准将把互联网视频扔回到黑暗时代
2010/02/10 HTML / CSS
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
Python面试题:如何用Python来发送邮件
2016/03/15 面试题
2014年会策划方案
2014/05/11 职场文书
经济国贸专业求职信
2014/06/18 职场文书
三十年同学聚会致辞
2015/07/28 职场文书
小学入学感言
2015/08/01 职场文书
初三化学教学反思
2016/02/22 职场文书
Oracle设置DB、监听和EM开机启动的方法
2021/04/25 Oracle
JUnit5常用注解的使用
2021/07/02 Java/Android