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脚本数据库功能详解(中)
Oct 09 PHP
用PHP进行MySQL删除记录操作代码
Jun 07 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
Nov 02 PHP
php使用异或实现的加密解密实例
Sep 04 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
thinkphp浏览历史功能实现方法
Oct 29 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
php获取从html表单传递数组的方法
Mar 20 PHP
nginx+thinkphp下解决不支持pathinfo模式
Jul 01 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
PHP利用百度ai实现文本和图片审核
May 08 PHP
Laravel-添加后台模板AdminLte的实现方法
Oct 08 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
风格模板初级不完全修改教程
2006/10/09 PHP
ThinkPHP控制器间实现相互调用的方法
2014/10/31 PHP
php读取txt文件并将数据插入到数据库
2016/02/23 PHP
PHP读取、解析eml文件及生成网页的方法示例
2017/09/04 PHP
PHP+MySql实现一个简单的留言板
2020/07/19 PHP
javascript 解析url的search方法
2010/02/09 Javascript
基于jQuery替换table中的内容并显示进度条的代码
2011/08/02 Javascript
javascript插入样式实现代码
2012/02/22 Javascript
用JS提交参数创建form表单在FireFox中遇到的问题
2013/01/16 Javascript
有关easyui-layout中的收缩层无法显示标题的解决办法
2016/05/10 Javascript
微信小程序 Nginx环境配置详细介绍
2017/02/14 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
vue实现简单的星级评分组件源码
2018/11/16 Javascript
微信小游戏之使用three.js 绘制一个旋转的三角形
2019/06/10 Javascript
JavaScript实现随机点名程序
2020/03/25 Javascript
解决基于 keep-alive 的后台多级路由缓存问题
2020/12/23 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
Python实现发送email的几种常用方法
2014/08/18 Python
python使用xlrd实现检索excel中某列含有指定字符串记录的方法
2015/05/09 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
Python requests模块实例用法
2019/02/11 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
Python爬虫图片懒加载技术 selenium和PhantomJS解析
2019/09/18 Python
如何通过python实现人脸识别验证
2020/01/17 Python
在Pytorch中使用Mask R-CNN进行实例分割操作
2020/06/24 Python
详解HTML5中垂直上下居中的解决方案
2017/12/20 HTML / CSS
Microsoft新加坡官方网站:购买微软最新软件和技术产品
2016/10/28 全球购物
运动会广播稿60字
2014/01/15 职场文书
党员服务承诺书
2014/05/28 职场文书
科技节口号
2014/06/19 职场文书
2015年建党94周年演讲稿
2015/03/19 职场文书
简历中的自我评价怎么写呢?
2019/04/30 职场文书
MySQL索引知识的一些小妙招总结
2021/05/10 MySQL
Win11查看设备管理器
2022/04/19 数码科技