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手机号码归属地查询代码(API接口/mysql)
Sep 04 PHP
PHP APC的安装与使用详解
Jun 13 PHP
使用php将某个目录下面的所有文件罗列出来的方法详解
Jun 21 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
Jul 18 PHP
php截取字符串函数分享
Feb 02 PHP
php实现简单的上传进度条
Nov 17 PHP
PHP给文字内容中的关键字进行套红处理
Apr 12 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
详解PHP中的外观模式facade pattern
Feb 05 PHP
Laravel框架分页实现方法分析
Jun 12 PHP
PHP匿名函数(闭包函数)详解
Mar 22 PHP
php版本CKEditor 4和CKFinder安装及配置方法图文教程
Jun 05 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
【动漫杂谈】关于《请在T台上微笑》
2020/03/03 日漫
php 三维饼图的实现代码
2008/09/28 PHP
php下连接mssql2005的代码
2011/01/17 PHP
PHP全概率运算函数(优化版) Webgame开发必备
2011/07/04 PHP
WIN8.1下搭建PHP5.6环境
2015/04/29 PHP
PHP CURL 多线程操作代码实例
2015/05/13 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
php实现留言板功能(代码详解)
2017/03/28 PHP
PHP实现基于回溯法求解迷宫问题的方法详解
2017/08/17 PHP
背景音乐每次刷新都可以自动更换
2007/02/01 Javascript
层序遍历在ExtJs的TreePanel中的应用
2009/10/16 Javascript
javascript GUID生成器实现代码
2009/10/31 Javascript
Js 中debug方式
2010/02/07 Javascript
Document:getElementsByName()使用方法及示例
2013/10/28 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
jQuery使用addClass()方法给元素添加多个class样式
2015/03/26 Javascript
JavaScript编写连连看小游戏
2015/07/07 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
js的对象与函数详解
2019/01/21 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
python2.7的编码问题与解决方法
2016/10/04 Python
Python绑定方法与非绑定方法详解
2017/08/18 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
python设置环境变量的作用整理
2020/02/17 Python
JAVA SWT事件四种写法实例解析
2020/06/05 Python
师范生自荐信范文
2013/10/06 职场文书
综合实践教学反思
2014/01/31 职场文书
趣味活动策划方案
2014/02/08 职场文书
应急管理培训方案
2014/06/12 职场文书
小学生田径运动会广播稿
2014/09/11 职场文书
党校毕业个人总结
2015/02/28 职场文书
学校节水倡议书
2015/04/29 职场文书
隐形的翅膀观后感
2015/06/10 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
导游词书写之黄山
2019/08/06 职场文书
Java 超详细讲解IO操作字节流与字符流
2022/03/25 Java/Android