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 相关文章推荐
PHP初学者头疼问题总结
Oct 09 PHP
将OICQ数据转成MYSQL数据
Oct 09 PHP
如何在PHP程序中防止盗链
Apr 09 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-3 代码组织和重用2
Jul 03 PHP
浅析php中抽象类和接口的概念以及区别
Jun 27 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
thinkphp判断访客为手机端或PC端的方法
Nov 24 PHP
PHP SPL标准库之数据结构栈(SplStack)介绍
May 12 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHP实现图片压缩
Sep 09 PHP
详解PHP的抽象类和抽象方法以及接口总结
Mar 15 PHP
PHP判断当前使用的是什么浏览器(推荐)
Oct 27 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 strtotime函数详解
2009/12/18 PHP
php 生成静态页面的办法与实现代码详细版
2010/02/15 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
深入Memcache的Session数据的多服务器共享详解
2013/06/13 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
2015/10/19 PHP
php实现按天数、星期、月份查询的搜索框
2016/05/02 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
对象的类型:本地对象(1)
2006/12/29 Javascript
jquery 多行滚动代码(附详细解释)
2010/06/17 Javascript
JavaScript中使用document.write向页面输出内容实例
2014/10/16 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
Vue表单输入绑定的示例代码
2018/11/01 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
js面向对象之实现淘宝放大镜
2020/01/15 Javascript
[22:07]DOTA2-DPC中国联赛 正赛 iG vs Magma 选手采访
2021/03/11 DOTA
详解Python中内置的NotImplemented类型的用法
2015/03/31 Python
python 默认参数问题的陷阱
2016/02/29 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
python3爬取淘宝信息代码分析
2018/02/10 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
python通过配置文件共享全局变量的实例
2019/01/11 Python
在cmd中查看python的安装路径方法
2019/07/03 Python
python tkinter实现彩球碰撞屏保
2019/07/30 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
python sklearn常用分类算法模型的调用
2019/10/16 Python
Python3.9又更新了:dict内置新功能
2020/02/28 Python
django项目中新增app的2种实现方法
2020/04/01 Python
使用python采集Excel表中某一格数据
2020/05/14 Python
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
英国电信商店:BT Shop
2019/12/17 全球购物
手机促销活动方案
2014/02/05 职场文书
javascript的setTimeout()使用方法总结
2021/11/20 Javascript
CSS实现五种常用的2D转换
2021/12/06 HTML / CSS
SpringBoot中使用Redis作为全局锁示例过程
2022/03/24 Java/Android