PHP简单验证码功能机制实例详解


Posted in PHP onMarch 27, 2019

本文实例讲述了PHP简单验证码功能机制。分享给大家供大家参考,具体如下:

网站的安全性是开发者不可忽视的一个问题,目前使用最多的一种可以提高网站安全性的方法就是使用验证码功能机制,有的仅仅使用一个几位数字字母混乱的验证码,有的进行手机发送短信进行验证,有的使用邮箱发送邮件进行验证,但是这个验证码功能机制是如何实现的呢?下面就为大家详细解释验证码功能机制的实现思路以及简单的实现方法。

1、验证码功能机制实现思路

① 常规的验证码实现:

a、产生一张png的图片
b、为图片设置背景色
c、设置字体颜色和样式
d、产生4位数的随机的验证码
e、把产生的每个字符调整旋转角度和位置画到png图片上
f、加入噪点和干扰线防止注册机器分析原图片来恶意注册
g、输出图片
h、释放图片所占内存
i、将验证码保存到session或是数据库
j、将和输入的验证码进行对比

② 短信(邮箱)验证码机制:

a、产生4-6位数的随机的验证码
b、把产生的每个字符保存到session或是数据库
c、将验证码发送到用户的手机(邮箱)
d、用户在规定时间内进行输入
e、将验证码从session或是数据库中取出
f、将和输入的验证码进行对比验证

2、简单的实现验证码功能机制

① 新建captcha.php,写入以下代码

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0020
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
//开启session
session_start();
//创建一个大小为 100*30 的验证码
$image = imagecreatetruecolor(100, 30);
$bgcolor = imagecolorallocate($image, 255, 255, 255);
imagefill($image, 0, 0, $bgcolor);
$captch_code = '';
for ($i = 0; $i < 4; $i++) {
  $fontsize = 6;
  $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
  $data = 'abcdefghijkmnpqrstuvwxy3456789';
  $fontcontent = substr($data, rand(0, strlen($data) - 1), 1);
  $captch_code .= $fontcontent;
  $x = ($i * 100 / 4) + rand(5, 10);
  $y = rand(5, 10);
  imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
}
//就生成的验证码保存到session
$_SESSION['authcode'] = $captch_code;
//在图片上增加点干扰元素
for ($i = 0; $i < 200; $i++) {
  $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
  imagesetpixel($image, rand(1, 99), rand(1, 29), $pointcolor);
}
//在图片上增加线干扰元素
for ($i = 0; $i < 3; $i++) {
  $linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
  imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1, 29), $linecolor);
}
//设置头
header('content-type:image/png');
imagepng($image);
imagedestroy($image);
?>

② 新建form.php,写入以下代码

<?php
/**
 * =======================================
 * Created by WeiBang Technology.
 * User: Wei ZhiHua
 * Date: 2016/10/12 0021
 * Time: 下午 4:14
 * Power: 实现验证码功能
 * =======================================
 */
if (isset($_REQUEST['authcode'])) {
  session_start();
  if (strtolower($_REQUEST['authcode']) == $_SESSION['authcode']) {
    echo "输入正确!";
  } else {
    echo "输入错误!";
  }
  exit();
}
?>
<!DOCTYPE html>
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
  <title>确认验证码</title>
</head>
<body>
<form method="post" action="./form.php">
  <p>验证码图片:
    <img id="captcha_img" border="1" src="./captcha.php?r=<?php echo rand(); ?>" width=100 height=30>
    <a href="javascript:void(0)" rel="external nofollow" 
      onClick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">换一个?</a>
  </p>
  <p>请输入图片中的内容:<input type="text" name="authcode" value=""/></p>
  <p><input type="submit" value="提交" style="padding:6px 20px;"></p>
</form>
</body>
</html>

以上就是php验证码的制作思路和实现方法,从简单到复杂,可以根据这些写出非常完美的验证码功能机制。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
snoopy PHP版的网络客户端提供本地下载
Apr 15 PHP
一道关于php变量引用的面试题
Aug 08 PHP
php抽奖小程序的实现代码
Jun 18 PHP
php读取远程gzip压缩网页的方法
Dec 29 PHP
PHP实现将textarea的值根据回车换行拆分至数组
Jun 10 PHP
CodeIgniter读写分离实现方法详解
Jan 20 PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
Dec 21 PHP
小程序微信退款功能实现方法详解【基于thinkPHP】
May 05 PHP
Laravel 微信小程序后端实现用户登录的示例代码
Nov 26 PHP
PHP重载基础知识回顾
Sep 10 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
Mar 27 #PHP
PHP实现数据四舍五入的方法小结【4种方法】
Mar 27 #PHP
PHP判断是否微信访问的方法示例
Mar 27 #PHP
PHP中localeconv()函数的用法
Mar 26 #PHP
PHP实现的支付宝支付功能示例
Mar 26 #PHP
PHP小程序支付功能完整版【基于thinkPHP】
Mar 26 #PHP
PHP实现微信退款的方法示例
Mar 26 #PHP
You might like
PHP调用三种数据库的方法(2)
2006/10/09 PHP
PHP中ini_set与ini_get用法实例
2014/11/04 PHP
PHP错误Warning:mysql_query()解决方法
2015/10/24 PHP
PHP使用PHPExcel实现批量上传到数据库的方法
2017/06/08 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
浅谈PHP之ThinkPHP框架使用详解
2020/07/21 PHP
JavaScript DOM 学习第三章 内容表格
2010/02/19 Javascript
js打印纸函数代码(递归)
2010/06/18 Javascript
JavaScript的递归之递归与循环示例介绍
2013/08/05 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
Bootstrap 3 进度条的实现
2017/02/22 Javascript
bootstrap fileinput 插件使用项目总结(经验)
2017/02/22 Javascript
vue.js实现数据动态响应 Vue.set的简单应用
2017/06/15 Javascript
JavaScript实现求最大公共子串的方法
2018/02/03 Javascript
JavaScript设计模式---单例模式详解【四种基本形式】
2020/05/16 Javascript
javascript实现前端分页功能
2020/11/26 Javascript
python实现通过代理服务器访问远程url的方法
2015/04/29 Python
python使用线程封装的一个简单定时器类实例
2015/05/16 Python
利用python在excel里面直接使用sql函数的方法
2019/02/08 Python
python+selenium+Chrome options参数的使用
2020/03/18 Python
HTML5 Canvas标签使用收录
2009/07/07 HTML / CSS
瑜伽国际:Yoga International
2018/04/18 全球购物
Farfetch中文官网:奢侈品牌时尚购物平台
2020/03/15 全球购物
Pamela Love官网:纽约设计师Pamela Love的精美、时尚和穿孔珠宝
2020/10/19 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
一些高难度的SQL面试题
2016/11/29 面试题
星空联盟C# .net笔试题
2014/12/05 面试题
委托书模板
2014/04/04 职场文书
护林防火标语
2014/06/27 职场文书
倡议书的写法
2014/08/30 职场文书
街道党风廉政建设调研报告
2015/01/01 职场文书
幼儿园六一儿童节演讲稿
2015/03/19 职场文书
门店店长岗位职责
2015/04/14 职场文书
如何撰写出一份完美的商业计划书?
2019/07/12 职场文书
Nginx配置根据url参数重定向
2022/04/11 Servers