php验证码的制作思路和实现方法


Posted in PHP onNovember 12, 2015

一、制作思路

由于注册的时候常常会用到注册码来防止机器恶意注册,这里我发表一个产生png图片验证码的基本图像,简单的思路分析:

1、产生一张png的图片
2、为图片设置背景色
3、设置字体颜色和样式
4、产生4位数的随机的验证码
5、把产生的每个字符调整旋转角度和位置画到png图片上
6、加入噪点和干扰线防止注册机器分析原图片来恶意注册
7、输出图片
8、释放图片所占内存

二、实现方法

authcode.php文件

<?php
    session_start ();
    header ( 'Content-type: image/png' );
    //创建图片
    $im = imagecreate($x=130,$y=45 );
    $bg = imagecolorallocate($im,rand(50,200),rand(0,155),rand(0,155)); //第一次对 imagecolorallocate() 的调用会给基于调色板的图像填充背景色
    $fontColor = imageColorAllocate ( $im, 255, 255, 255 );  //字体颜色
    $fontstyle = 'rock.ttf';          //字体样式,这个可以从c:\windows\Fonts\文件夹下找到,我把它放到和authcode.php文件同一个目录,这里可以替换其他的字体样式
    //产生随机字符
    for($i = 0; $i < 4; $i ++) {
        $randAsciiNumArray     = array (rand(48,57),rand(65,90));
        $randAsciiNum         = $randAsciiNumArray [rand ( 0, 1 )];
        $randStr             = chr ( $randAsciiNum );
        imagettftext($im,30,rand(0,20)-rand(0,25),5+$i*30,rand(30,35),$fontColor,$fontstyle,$randStr);
        $authcode            .= $randStr; 
    }
    $_SESSION['authcode']    = $randFourStr;//用户和用户输入的验证码做比较
    //干扰线
    for ($i=0;$i<8;$i++){
        $lineColor    = imagecolorallocate($im,rand(0,255),rand(0,255),rand(0,255));
        imageline ($im,rand(0,$x),0,rand(0,$x),$y,$lineColor);
    }
    //干扰点
    for ($i=0;$i<250;$i++){
        imagesetpixel($im,rand(0,$x),rand(0,$y),$fontColor);
    }
    imagepng($im);
    imagedestroy($im);        
?>

效果图:

php验证码的制作思路和实现方法

以上就是php验证码的制作思路和实现方法,希望对大家的学习有所帮助。

PHP 相关文章推荐
Mysql的常用命令
Oct 09 PHP
让PHP开发者事半功倍的十大技巧小结
Apr 20 PHP
php学习笔记 php中面向对象三大特性之一[封装性]的应用
Jun 13 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
Dec 06 PHP
使用php检测用户当前使用的浏览器是否为IE浏览器
Dec 03 PHP
PHP中strlen()和mb_strlen()的区别浅析
Jun 19 PHP
分享50个提高PHP执行效率的技巧
Dec 26 PHP
php文件缓存方法总结
Mar 16 PHP
thinkPHP自动验证机制详解
Dec 05 PHP
PHP递归实现快速排序的方法示例
Dec 18 PHP
在Laravel 的 Blade 模版中实现定义变量
Oct 14 PHP
PHP设计模式(观察者模式)
Jul 07 PHP
两款万能的php分页类
Nov 12 #PHP
微信获取用户地理位置信息的原理与步骤
Nov 12 #PHP
php验证手机号码
Nov 11 #PHP
Thinkphp无限级分类代码
Nov 11 #PHP
php验证码生成代码
Nov 11 #PHP
分享10段PHP常用代码
Nov 11 #PHP
php+mysql实现无限级分类
Nov 11 #PHP
You might like
PHP4实际应用经验篇(4)
2006/10/09 PHP
PHP5+UTF8多文件上传类
2008/10/17 PHP
php xml实例 留言本
2009/03/20 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
javascript 计算两个整数的百分比值
2009/12/26 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
prototype框架中美元符号$用法分析
2016/01/22 Javascript
jQuery数据检索中根据关键字快速定位GridView指定行的实现方法
2016/06/08 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
js自制图片放大镜功能
2017/01/24 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
浅谈mint-ui loadmore组件注意的问题
2017/11/08 Javascript
如何制作一个Node命令行图像识别工具
2018/12/12 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
解决vuex刷新状态初始化的方法实现
2019/08/15 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
python查看zip包中文件及大小的方法
2015/07/09 Python
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
python实现爬虫统计学校BBS男女比例之数据处理(三)
2015/12/31 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
pip install 使用国内镜像的方法示例
2020/04/03 Python
解决Pytorch自定义层出现多Variable共享内存错误问题
2020/06/28 Python
Python多线程的退出控制实现
2020/08/10 Python
Europcar意大利:汽车租赁
2019/07/07 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
教师校本培训方案
2014/02/26 职场文书
《颐和园》教学反思
2014/02/26 职场文书
出纳担保书范文
2014/04/02 职场文书
气象学专业个人求职信
2014/04/22 职场文书
2014年大学生党员评议表自我评价
2014/09/20 职场文书
2015年行政部工作总结
2015/04/28 职场文书
初中班主任培训心得体会
2016/01/07 职场文书
Python如何使用logging为Flask增加logid
2021/03/30 Python