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 相关文章推荐
二十行语句实现从Excel到mysql的转化
Oct 09 PHP
实例介绍PHP的Reflection反射机制
Aug 05 PHP
php生成QRcode实例
Sep 22 PHP
PHP中使用addslashes函数转义的安全性原理分析
Nov 03 PHP
php常用文件操作函数汇总
Nov 22 PHP
PHP中Session可能会引起并发问题
Jun 26 PHP
php使用strip_tags()去除html标签仍有空白的解决方法
Jul 28 PHP
php字符串操作常见问题小结
Oct 11 PHP
Mac系统下安装PHP Xdebug
Mar 30 PHP
php面试中关于面向对象的相关问题
Feb 13 PHP
laravel框架中路由设置,路由参数和路由命名实例分析
Nov 23 PHP
PHP7 新增常量
Mar 09 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
linux系统下php安装mbstring扩展的二种方法
2014/01/20 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
关于php中一些字符串总结
2016/05/05 PHP
关于用Jquery的height()、width()计算动态插入的IMG标签的宽高的问题
2010/12/08 Javascript
提升你网站水平的jQuery插件集合推荐
2011/04/19 Javascript
Jquery Uploadify上传带进度条的简单实例
2014/02/12 Javascript
js中函数声明与函数表达式
2015/06/03 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
谈谈对JavaScript原生拖放的深入理解
2016/09/20 Javascript
微信小程序 底部导航栏目开发资料
2016/12/05 Javascript
详解Angularjs 如何自定义Img的ng-load 事件
2017/02/15 Javascript
详解在Vue中通过自定义指令获取dom元素
2017/03/04 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
基于jQuery实现图片推拉门动画效果的两种方法
2017/08/26 jQuery
详解使用Visual Studio Code对Node.js进行断点调试
2017/09/14 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
基于JS实现前端压缩上传图片的实例代码
2019/05/14 Javascript
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python中的filter()函数的用法
2015/04/27 Python
Python 正则表达式入门(中级篇)
2016/12/07 Python
详解python中的装饰器
2018/07/10 Python
python中将\\uxxxx转换为Unicode字符串的方法
2018/09/06 Python
对Python 除法负数取商的取整方式详解
2018/12/12 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
Python实现RGB与HSI颜色空间的互换方式
2019/11/27 Python
PyQT5 实现快捷键复制表格数据的方法示例
2020/06/19 Python
Python从MySQL数据库中面抽取试题,生成试卷
2021/01/14 Python
python解包概念及实例
2021/02/17 Python
荷兰在线体育用品商店:Avantisport.nl
2018/07/04 全球购物
现代生活方式的家具和装饰:Dot & Bo
2018/12/26 全球购物
水污染治理专业毕业生推荐信
2013/11/14 职场文书
工程业务员岗位职责
2013/12/31 职场文书
煤矿安全承诺书
2014/05/22 职场文书
致800米运动员广播稿(10篇)
2014/10/17 职场文书
2014小学教师年度考核工作总结
2014/12/03 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书