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 相关文章推荐
提问的智慧(2)
Oct 09 PHP
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
php中DOMElement操作xml文档实例演示
Mar 26 PHP
使用PHP接收POST数据,解析json数据
Jun 28 PHP
php下拉选项的批量操作的实现代码
Oct 14 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 PHP
php使用PDO操作MySQL数据库实例
Dec 30 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
HTML中嵌入PHP的简单方法
Feb 16 PHP
PHP在同一域名下两个不同的项目做独立登录机制详解
Sep 22 PHP
Laravel中服务提供者和门面模式的入门介绍
Nov 06 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
Sep 30 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实现Ftp用户的在线管理的代码
2007/03/06 PHP
php的memcached客户端memcached
2011/06/14 PHP
PHP中的str_repeat函数在JavaScript中的实现
2013/09/16 PHP
php页面防重复提交方法总结
2013/11/25 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
2019/08/02 PHP
FCK调用方法..
2006/12/21 Javascript
JQuery自定义事件的应用 JQuery最佳实践
2010/08/01 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
IE6/7/8/9不支持exec的简写方式
2011/05/25 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
TypeScript 中接口详解
2015/06/19 Javascript
纯js模拟div层弹性运动的方法
2015/07/27 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
js实现文字超出部分用省略号代替实例代码
2016/09/01 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
2016/11/13 Javascript
Javascript中类式继承和原型式继承的实现方法和区别之处
2017/04/25 Javascript
jQuery动画_动力节点节点Java学院整理
2017/07/04 jQuery
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
基于vue.js中关于下拉框的值默认及绑定问题
2018/08/22 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
使用Mock.js生成前端测试数据
2020/12/13 Javascript
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
使用Python脚本来获取Cisco设备信息的示例
2015/05/04 Python
Python判断文本中消息重复次数的方法
2016/04/27 Python
用不到50行的Python代码构建最小的区块链
2017/11/16 Python
python中如何使用insert函数
2020/01/09 Python
英国办公用品商店:Office Outlet
2018/04/04 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
捷克家具销售网站:SCONTO Nábytek
2020/01/02 全球购物
手机被没收检讨书
2014/02/22 职场文书
乡镇总工会学雷锋活动总结
2014/03/01 职场文书
公司董事长助理工作职责
2014/07/12 职场文书
科级干部培训心得体会
2016/01/06 职场文书