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 相关文章推荐
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
PHP下判断网址是否有效的代码
Oct 08 PHP
PHP两种去掉数组重复值的方法比较
Jun 19 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(九)
Jun 24 PHP
ThinkPHP模板比较标签用法详解
Jun 30 PHP
php中simplexml_load_file函数用法实例
Nov 12 PHP
php中PDO方式实现数据库的增删改查
May 17 PHP
非常实用的php验证码类
May 15 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
May 31 PHP
PHP类和对象相关系统函数与运算符小结
Sep 28 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
Feb 08 PHP
PHP中cookie知识点学习
May 06 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中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
非常精妙的PHP递归调用与静态变量使用
2012/12/16 PHP
Php中用PDO查询Mysql来避免SQL注入风险的方法
2013/04/25 PHP
php bootstrap实现简单登录
2016/03/08 PHP
Yii2.0预定义的别名功能小结
2016/07/04 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
CSS心形加载的动画源码的实现
2021/03/09 HTML / CSS
解析ScrollPic在ie8下只滚动一遍,然后变为空白 ie6,ie7,chrome,firefox正常
2013/06/26 Javascript
JS实现匀速运动的代码实例
2013/11/29 Javascript
js中判断用户输入的值是否为空的简单实例
2013/12/23 Javascript
js showModalDialog 弹出对话框的简单实例(子窗体)
2014/01/07 Javascript
使用typescript开发angular模块并发布npm包
2018/04/19 Javascript
微信小程序局部刷新触发整页刷新效果的实现代码
2018/11/21 Javascript
Javascript实现关闭广告效果
2021/01/29 Javascript
[20:21]《一刀刀一天》第十六期:TI国际邀请赛正式打响,总奖金超过550万
2014/05/23 DOTA
[01:07:20]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第二场 2月2日
2021/03/11 DOTA
[01:39:04]DOTA2-DPC中国联赛 正赛 SAG vs CDEC BO3 第二场 2月1日
2021/03/11 DOTA
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
python执行使用shell命令方法分享
2017/11/08 Python
利用Python写一个爬妹子的爬虫
2018/06/08 Python
Pytorch实现各种2d卷积示例
2019/12/30 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
Python3爬虫ChromeDriver的安装实例
2021/02/06 Python
世界顶级俱乐部的官方球衣和套装:Subside Sports
2018/04/22 全球购物
Myprotein丹麦官网:欧洲第一运动营养品牌
2019/04/15 全球购物
英国百年闻名的优质健康产品连锁店:Holland & Barrett
2019/12/19 全球购物
大学生怎样进行自我评价
2013/12/07 职场文书
毕业生自荐书
2014/02/03 职场文书
彩色的非洲教学反思
2014/02/18 职场文书
餐饮商业计划书范文
2014/04/29 职场文书
省级青年文明号申报材料
2014/05/23 职场文书
旅游与环境专业求职信
2014/06/05 职场文书
工地食品安全责任书
2015/05/09 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
Go 内联优化让程序员爱不释手
2022/06/21 Golang