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 相关文章推荐
一个数据采集类
Feb 14 PHP
使用 MySQL Date/Time 类型
Mar 26 PHP
mysql 中InnoDB和MyISAM的区别分析小结
Apr 15 PHP
Pain 全世界最小最简单的PHP模板引擎 (普通版)
Oct 23 PHP
浅析php变量作用域的一些问题
Aug 08 PHP
ThinkPHP中U方法的使用浅析
Jun 13 PHP
PHP实现中文圆形印章特效
Jun 19 PHP
讲解WordPress开发中一些常用的debug技巧
Dec 18 PHP
中高级PHP程序员应该掌握哪些技术?
Sep 23 PHP
PHP下 Mongodb 连接远程数据库的实例代码
Aug 30 PHP
PHP实现模拟http请求的方法分析
Dec 20 PHP
php 中htmlentities导致中文无法查询问题
Sep 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
php面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
php+mysqli批量查询多张表数据的方法
2015/01/29 PHP
PHPMailer ThinkPHP实现自动发送邮件功能
2018/06/10 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
如何利用PHP实现上传图片功能详解
2020/09/24 PHP
Javascript操纵Cookie实现购物车程序
2007/02/15 Javascript
js限制checkbox选中个数以限制六个为例
2014/07/15 Javascript
抛弃Nginx使用nodejs做反向代理服务器
2014/07/17 NodeJs
jQuery打字效果实现方法(附demo源码下载)
2015/12/18 Javascript
JavaScript数组合并的多种方法
2016/05/22 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
2016/05/30 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
微信小程序收藏功能的实现代码
2018/06/12 Javascript
解决Layui中templet中a的onclick参数传递的问题
2019/09/20 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
解决antd Form 表单校验方法无响应的问题
2020/10/27 Javascript
简单介绍Python的Django框架的dj-scaffold项目
2015/05/30 Python
对Python 2.7 pandas 中的read_excel详解
2018/05/04 Python
详解Python连接MySQL数据库的多种方式
2019/04/16 Python
Python使用pyautocad+openpyxl处理cad文件示例
2019/07/11 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
序列化Python对象的方法
2020/08/01 Python
Django静态文件加载失败解决方案
2020/08/26 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
某IT外企面试题-二分法求方程!看看大家的C++功底
2015/07/04 面试题
母亲追悼会答谢词
2014/01/27 职场文书
大型主题婚礼活动策划方案
2014/09/15 职场文书
拆迁委托协议书
2014/09/15 职场文书
党建工作汇报材料
2014/12/24 职场文书
高考1977观后感
2015/06/04 职场文书
解决pytorch读取自制数据集出现过的问题
2021/05/31 Python
详细了解MVC+proxy
2021/07/09 Java/Android