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下10件你也许并不了解的事情
Sep 11 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php实现TCP端口检测的方法
Apr 01 PHP
PHP使用内置函数file_put_contents写入文件及追加内容的方法
Dec 07 PHP
php轻松实现文件上传功能
Mar 03 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
Sep 11 PHP
Yii2 如何在modules中添加验证码的方法
Jun 19 PHP
利用PHP访问MySql数据库的逻辑操作以及增删改查的实例讲解
Aug 30 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
Oct 15 PHP
Laravel 添加多语言提示信息的方法
Sep 29 PHP
php7连接MySQL实现简易查询程序的方法
Oct 13 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获取某个目录大小的代码
2008/09/10 PHP
phpMyAdmin 链接表的附加功能尚未激活的问题
2010/08/01 PHP
php将gd生成的图片缓存到memcache的小例子
2013/06/05 PHP
php不写闭合标签的好处
2014/03/04 PHP
PHP调用.NET的WebService 简单实例
2015/03/27 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
js验证表单大全
2006/11/25 Javascript
javascript 硬盘序列号+其它硬件信息
2008/12/23 Javascript
javascript setTimeout和setInterval 的区别
2009/12/08 Javascript
JavaScript类型转换方法及需要注意的问题小结(挺全面)
2010/11/11 Javascript
Javascript延迟执行实现方法(setTimeout)
2010/12/30 Javascript
javascript向flash swf文件传递参数值注意细节
2012/12/11 Javascript
Textarea根据内容自适应高度
2013/10/28 Javascript
window.showModalDialog()返回值的学习心得总结
2014/01/07 Javascript
jQuery使用toggleClass方法动态添加删除Class样式的方法
2015/03/26 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
详解AngularJS通过ocLazyLoad实现动态(懒)加载模块和依赖
2017/03/01 Javascript
vue实现app页面切换动画效果实例
2017/05/23 Javascript
vue2+el-menu实现路由跳转及当前项的设置方法实例
2017/11/07 Javascript
JS判断两个数组或对象是否相同的方法示例
2019/02/28 Javascript
微信小程序拼接图片链接无底洞深入探究
2019/09/03 Javascript
vue组件中实现嵌套子组件案例
2020/08/31 Javascript
Python设置Socket代理及实现远程摄像头控制的例子
2015/11/13 Python
利用Tkinter(python3.6)实现一个简单计算器
2017/12/21 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
在python中用print()输出多个格式化参数的方法
2019/07/16 Python
Holland & Barrett爱尔兰:英国领先的健康零售商
2019/03/31 全球购物
美国孩之宝玩具官网:Hasbro Pulse
2019/06/24 全球购物
教师研修随笔感言
2014/01/23 职场文书
合作协议书
2014/04/23 职场文书
1亿有多大教学反思
2014/05/01 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
导游词怎么写
2015/02/04 职场文书
2015年车间主任工作总结
2015/05/21 职场文书