PHP验证码生成原理和实现


Posted in PHP onJanuary 24, 2016

验证码在表单实现越来越多了,但是用js的写的验证码,总觉得不方便,所以学习了下php实现的验证码。好吧,其实是没有事情干,但是又不想浪费时间,所以学习了下php实现验证码。正所谓,技多不压身。而且,也可以封装成一个函数,以后使用的时候也是很方便的,当然现在未封装。

先给大家附上一张效果图:

PHP验证码生成原理和实现

由于注册的时候常常会用到注册码来防止机器恶意注册,这里我发表一个产生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初学入门
Nov 19 PHP
理解php Hash函数,增强密码安全
Feb 25 PHP
仿Aspnetpager的一个PHP分页类代码 附源码下载
Oct 08 PHP
保存到桌面、设为桌面且带图标的PHP代码
Nov 19 PHP
PHP实现过滤掉非汉字字符只保留中文字符
Jun 04 PHP
最准确的php截取字符串长度函数
Oct 29 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
php简单解析mysqli查询结果的方法(2种方法)
Jun 29 PHP
ThinkPHP框架整合微信支付之JSAPI模式图文详解
Apr 09 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
详解PHP对象的串行化与反串行化
Jan 24 #PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 #PHP
高质量PHP代码的50个实用技巧必备(下)
Jan 22 #PHP
php使用timthumb生成缩略图的方法
Jan 22 #PHP
php session的锁和并发
Jan 22 #PHP
php5.4传引用时报错问题分析
Jan 22 #PHP
php实现word转html的方法
Jan 22 #PHP
You might like
PHP 作用域解析运算符(::)
2010/07/27 PHP
详解php的魔术方法__get()和__set()使用介绍
2012/09/19 PHP
php制作动态随机验证码
2015/02/12 PHP
phpStudy配置多站点多域名方法及遇到的403错误解决方法
2017/10/19 PHP
不懂JavaScript应该怎样学
2008/04/16 Javascript
用Js实现的动态增加表格示例自己写的
2013/10/21 Javascript
js判断手机和pc端选择不同执行事件的方法
2015/01/30 Javascript
JavaScript检测实例属性, 原型属性
2015/02/04 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
JavaScript中this详解
2015/09/01 Javascript
javascript:void(0)点击登录没反应怎么解决
2015/11/13 Javascript
JavaScript的Backbone.js框架入门学习指引
2016/05/07 Javascript
使用JavaScript解决网页图片拉伸问题(推荐)
2016/11/25 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
vue下history模式刷新后404错误解决方法
2018/08/18 Javascript
JavaScript命令模式原理与用法实例详解
2020/03/10 Javascript
在Vue.js中使用TypeScript的方法
2020/03/19 Javascript
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
Python中特殊函数集锦
2015/07/27 Python
django实现前后台交互实例
2017/08/07 Python
Python3的介绍、安装和命令行的认识(推荐)
2018/10/20 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
基于Django的乐观锁与悲观锁解决订单并发问题详解
2019/07/31 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
jupyternotebook 撤销删除的操作方式
2020/04/17 Python
python定义类的简单用法
2020/07/24 Python
HTML5 Canvas中使用用路径描画圆弧
2015/01/01 HTML / CSS
留学自荐信
2013/10/10 职场文书
个人实用的自我评价范文
2013/11/23 职场文书
高中生期末评语大全
2014/01/28 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
商场广播稿范文
2015/08/19 职场文书
《春酒》教学反思
2016/02/22 职场文书
发言稿之优秀教师篇
2019/09/26 职场文书
GitHub上77.9K的Axios项目有哪些值得借鉴的地方详析
2021/06/15 Javascript