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 相关文章推荐
我的论坛源代码(九)
Oct 09 PHP
smarty section简介与用法分析
Oct 03 PHP
用PHP书写安全的脚本代码
Feb 05 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
php自定义的格式化时间示例代码
Dec 05 PHP
php制作unicode解码工具(unicode编码转换器)代码分享
Dec 24 PHP
PHP图片加水印实现方法
May 06 PHP
php组合排序简单实现方法
Oct 15 PHP
PHP针对中英文混合字符串长度判断及截取方法示例
Mar 31 PHP
laravel 解决ajax异步提交数据,并还回填充表格的问题
Oct 15 PHP
Laravel 类和接口注入相关的代码
Oct 15 PHP
TP5框架简单登录功能实现方法示例
Oct 31 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实现高效获取图片尺寸的方法
2014/12/12 PHP
PHP网站开发中常用的8个小技巧
2015/02/13 PHP
PHP实现将优酷土豆腾讯视频html地址转换成flash swf地址的方法
2017/08/04 PHP
PHP长连接实现与使用方法详解
2018/02/11 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
myFocus slide3D v1.1.0 使用方法与下载
2011/01/12 Javascript
web开发人员学习jQuery的6大理由及jQuery的优势介绍
2013/01/03 Javascript
jquery select动态加载选择(兼容各种浏览器)
2013/02/01 Javascript
javascript 判断字符串是否包含某字符串及indexOf使用示例
2013/10/18 Javascript
Javascript动画效果(4)
2016/10/11 Javascript
js鼠标跟随运动效果
2017/03/11 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
JavaScript中的FileReader图片预览上传功能实现代码
2017/07/24 Javascript
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
Node.js 使用request模块下载文件的实例
2018/09/05 Javascript
nodejs 使用nodejs-websocket模块实现点对点实时通讯
2018/11/28 NodeJs
json 带斜杠时如何解析的实现
2019/08/12 Javascript
Python标准库之itertools库的使用方法
2017/09/07 Python
Python中反射和描述器总结
2018/09/23 Python
python如何发布自已pip项目的方法步骤
2018/10/09 Python
python 使用sys.stdin和fileinput读入标准输入的方法
2018/10/17 Python
Python基础之循环语句用法示例【for、while循环】
2019/03/23 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
twilio python自动拨打电话,播放自定义mp3音频的方法
2019/08/08 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
python中数据库like模糊查询方式
2020/03/02 Python
Python实现屏幕录制功能的代码
2020/03/02 Python
python多线程semaphore实现线程数控制的示例
2020/08/10 Python
HTML5逐步分析实现拖放功能的方法
2020/09/30 HTML / CSS
美国大尺码女装零售商:TORRID
2016/10/01 全球购物
Shopping happy life西班牙:以最优惠的价格提供最好的时尚配饰
2020/03/13 全球购物
一套英文Java笔试题面试题
2016/04/21 面试题
建筑自我鉴定
2013/10/19 职场文书
公益活动策划方案
2014/01/09 职场文书
二年级数学教学反思
2014/01/21 职场文书
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript