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下实现伪 url 的超简单方法[转]
Sep 24 PHP
PHP文件上传原理简单分析
May 29 PHP
PHP整数取余返回负数的相关解决方法
May 15 PHP
php生成随机颜色方法汇总
Dec 03 PHP
详解cookie验证的php应用的一种SSO解决办法
Oct 20 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
php合并数组并保留键值的实现方法
Mar 12 PHP
php代码调试利器firephp安装与使用方法分析
Aug 21 PHP
Yii框架引入coreseek分页功能示例
Feb 08 PHP
PHP-FPM的配置与优化讲解
Mar 15 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
PHP字符串和十六进制如何实现互相转换
Jul 16 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实现utf-8和GB2312编码相互转换函数代码
2013/02/07 PHP
kohana框架上传文件验证规则写法示例
2014/07/14 PHP
基于PHP实现通过照片获取ip地址
2016/04/26 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
2020/02/22 PHP
jQuery插件 tabBox实现代码
2010/02/09 Javascript
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
关于jquery ajax 调用带参数的webservice返回XML数据一个小细节
2012/07/31 Javascript
JSP跨iframe如何传递参数实现代码
2013/09/21 Javascript
文本框(input)获取焦点(onfocus)时样式改变的示例代码
2014/01/10 Javascript
jQuery实时显示鼠标指针位置和键盘ASCII码
2016/03/28 Javascript
如何实现json数据可视化详解
2016/11/24 Javascript
详解使用grunt完成requirejs的合并压缩和js文件的版本控制
2017/03/02 Javascript
详解Vue之父子组件传值
2019/04/01 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
基于p5.js 2D图像接口的扩展(交互实现)
2020/11/30 Javascript
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Django Admin实现上传图片校验功能
2016/03/06 Python
Python面向对象基础入门之设置对象属性
2018/12/11 Python
对pandas处理json数据的方法详解
2019/02/08 Python
在TensorFlow中实现矩阵维度扩展
2020/05/22 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
Python爬虫之Selenium设置元素等待的方法
2020/12/04 Python
有关HTML5 Video对象的ontimeupdate事件(Chrome上无效)的问题
2013/07/19 HTML / CSS
澳大利亚领先的孕妇服装品牌:Mamaway
2018/08/14 全球购物
大学生新闻专业个人自我评价
2013/11/12 职场文书
四年级语文教学反思
2014/02/05 职场文书
擅自离岗检讨书
2014/02/11 职场文书
开业庆典策划方案
2014/02/18 职场文书
授权委托书范本(单位)
2014/09/28 职场文书
2014年党务工作总结
2014/11/25 职场文书
感谢信模板大全
2015/01/23 职场文书
西安兵马俑导游词
2015/02/02 职场文书
幼儿园校车安全责任书
2015/05/08 职场文书
行政处罚事先告知书
2015/07/01 职场文书
三严三实学习心得体会(精选N篇)
2016/01/05 职场文书
读《教育心理学》心得体会
2016/01/22 职场文书