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 相关文章推荐
把从SQL中取出的数据转化成XMl格式
Oct 09 PHP
IIS下PHP连接数据库提示mysql undefined function mysql_connect()
Jun 04 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
php+ajax导入大数据时产生的问题处理
Jun 11 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
PHP Streams(流)详细介绍及使用
May 12 PHP
PHP加密解密函数详解
Oct 28 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
Jun 09 PHP
Laravel框架实现的批量删除功能示例
Jan 16 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
Sep 30 PHP
Laravel 数据库加密及数据库表前缀配置方法
Oct 10 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防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
php array_walk 对数组中的每个元素应用用户自定义函数详解
2016/11/18 PHP
php创建图像具体步骤
2017/03/13 PHP
php中关于换行的实例写法
2019/09/26 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
获取css样式表内样式的js函数currentStyle(IE),defaultView(FF)
2011/02/14 Javascript
jquery的ajaxSubmit()异步上传图片并保存表单数据演示代码
2013/06/04 Javascript
利用函数的惰性载入提高javascript代码执行效率
2014/05/05 Javascript
jquery简单实现图片切换效果的方法
2015/05/12 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
使用AngularJS来实现HTML页面嵌套的方法
2015/06/17 Javascript
Bootstrap 布局组件(全)
2016/07/18 Javascript
JavaScript编写一个简易购物车功能
2016/09/17 Javascript
微信小程序getPhoneNumber获取用户手机号
2017/09/29 Javascript
微信小程序实现笑脸评分功能
2018/11/03 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
d3.js实现图形拖拽
2019/12/19 Javascript
python判断一个集合是否包含了另外一个集合中所有项的方法
2015/06/30 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
Python日期格式和字符串格式相互转换的方法
2020/02/18 Python
详解python程序中的多任务
2020/09/16 Python
Sunglasses Shop丹麦:欧洲第一的太阳镜在线销售网站
2017/10/22 全球购物
SQL里面IN比较快还是EXISTS比较快
2012/07/19 面试题
新学期开学寄语
2014/01/18 职场文书
《李时珍夜宿古寺》教学反思
2014/04/09 职场文书
2014年群众路线教育实践活动整改措施
2014/09/24 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
2019最新企业员工考勤管理制度(通用版)!
2019/07/02 职场文书
zabbix自定义监控nginx状态实现过程
2021/11/01 Servers
PostgreSQL基于pgrouting的路径规划处理方法
2022/04/18 PostgreSQL
Pandas 数据编码的十种方法
2022/04/20 Python
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL