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
php设计模式 Delegation(委托模式)
Jun 26 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
PHP读取文件内容后清空文件示例代码
Mar 18 PHP
PHP实现服务器状态监控的方法
Dec 09 PHP
如何通过Linux命令行使用和运行PHP脚本
Jul 29 PHP
joomla组件开发入门教程
May 04 PHP
php实现等比例不失真缩放上传图片的方法
Nov 14 PHP
利用PHP访问带有密码的Redis方法示例
Feb 09 PHP
PHP实现微信退款的方法示例
Mar 26 PHP
Yii框架操作cookie与session的方法实例详解
Sep 04 PHP
基于PHP实现用户在线状态检测
Nov 10 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
坏狼的PHP学习教程之第2天
2008/06/15 PHP
PHP表单验证的3个函数ISSET()、empty()、is_numeric()的使用方法
2011/08/22 PHP
php中多维数组按指定value排序的实现代码
2014/08/19 PHP
yii用户注册表单验证实例
2015/12/26 PHP
php使用自定义函数实现汉字分割替换功能示例
2017/01/30 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
JQuery中each()的使用方法说明
2010/08/19 Javascript
基于Jquery制作的幻灯片图集效果打包下载
2011/02/12 Javascript
Javascript 面向对象(二)封装代码
2012/05/23 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
2013/12/25 Javascript
JS 在指定数组中随机取出N个不重复的数据
2014/06/10 Javascript
jQuery中:lt选择器用法实例
2014/12/29 Javascript
javascript实现将文件保存到本地方法汇总
2015/07/26 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
2015/11/30 Javascript
JavaScript函数基础详解
2017/02/03 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
深入理解Vue父子组件生命周期执行顺序及钩子函数
2018/08/12 Javascript
vue 2.1.3 实时显示当前时间,每秒更新的方法
2018/09/16 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
2013/11/27 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
python join方法使用详解
2019/07/30 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
Python 使用双重循环打印图形菱形操作
2020/08/09 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
受外贸欢迎的美国主机:BlueHost
2017/05/16 全球购物
SEPHORA丝芙兰捷克官网:购买香水、化妆品和护肤品
2018/11/26 全球购物
美国一站式电动和手动工具商店:International Tool
2020/11/26 全球购物
KOHLER科勒美国官网:国际著名卫浴橱柜领先品牌
2020/06/27 全球购物
应届生煤化工求职信
2013/10/21 职场文书
优秀求职信范文分享
2013/12/19 职场文书
高中毕业自我评价
2014/02/08 职场文书
2014年体育工作总结
2014/11/24 职场文书
2015年学校消防安全工作总结
2015/10/14 职场文书