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 相关文章推荐
在windows iis5下安装php4.0+mysql之我见
Oct 09 PHP
php 404错误页面实现代码
Jun 22 PHP
解析php中heredoc的使用方法
Jun 17 PHP
php接口与接口引用的深入解析
Aug 09 PHP
php中Session的生成机制、回收机制和存储机制探究
Aug 19 PHP
Codeigniter(CI)框架分页函数及相关知识
Nov 03 PHP
利用PHP判断文件是否为图片的方法总结
Jan 06 PHP
Windows平台实现PHP连接SQL Server2008的方法
Jul 26 PHP
实例分析PHP中PHPMailer发邮件
Dec 13 PHP
wordpress自定义标签云与随机获取标签的方法详解
Mar 22 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 PHP
TP5框架使用QueryList采集框架爬小说操作示例
Mar 26 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
php上传文件,创建递归目录的实例代码
2013/10/18 PHP
php与java通过socket通信的实现代码
2013/10/21 PHP
thinkphp如何获取客户端IP
2015/11/03 PHP
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
javascript 3d 逐侦产品展示(核心精简)
2014/03/26 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
jQuery.extend 函数及用法详细
2015/09/06 Javascript
jquery UI Datepicker时间控件的使用及问题解决
2016/04/28 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
JavaScript实现计数器基础方法
2017/10/10 Javascript
vue2.0 elementUI制作面包屑导航栏
2018/02/22 Javascript
JS实现常见的查找、排序、去重算法示例
2018/05/21 Javascript
Node.js 的 GC 机制详解
2019/06/03 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
24个解决实际问题的ES6代码片段(小结)
2020/02/02 Javascript
[02:32]DOTA2亚洲邀请赛 VG战队巡礼
2015/02/03 DOTA
Python入门篇之条件、循环
2014/10/17 Python
python base64 decode incorrect padding错误解决方法
2015/01/08 Python
python自动化脚本安装指定版本python环境详解
2017/09/14 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python如何获取当前文件夹下所有文件名详解
2019/01/25 Python
使用python实现mqtt的发布和订阅
2019/05/05 Python
Python多版本开发环境管理工具介绍
2019/07/03 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
Python txt文件如何转换成字典
2020/11/03 Python
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
运动会广播稿50字
2014/01/26 职场文书
2014领导班子正风肃纪思想汇报
2014/09/18 职场文书
英文慰问信
2015/02/14 职场文书
2015年售后服务工作总结
2015/04/25 职场文书
诚信教育主题班会
2015/08/13 职场文书
2016年大学生实习单位评语
2015/12/01 职场文书
用python修改excel表某一列内容的操作方法
2021/06/11 Python
IDEA2021.2配置docker如何将springboot项目打成镜像一键发布部署
2021/09/25 Java/Android
JS轻量级函数式编程实现XDM二
2022/06/16 Javascript