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 相关文章推荐
利用discuz自带通行证整合dedecms的方法以及文件下载
Mar 06 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
如何使用Gitblog和Markdown建自己的博客
Jul 31 PHP
php实现smarty模板无限极分类的方法
Dec 07 PHP
ThinkPHP模板循环输出Volist标签用法实例详解
Mar 23 PHP
CI框架简单邮件发送类实例
May 18 PHP
thinkPHP模板中函数的使用方法示例
Nov 30 PHP
php curl 模拟登录并获取数据实例详解
Dec 22 PHP
php+resumablejs实现的分块上传 断点续传功能示例
Apr 18 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
Laravel5.7 Eloquent ORM快速入门详解
Apr 12 PHP
PHP数组对象与Json转换操作实例分析
Oct 22 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数组一对一替换实现代码
2012/08/31 PHP
PHP创建桌面快捷方式的实例代码
2014/02/17 PHP
注意!PHP 7中不要做的10件事
2016/09/18 PHP
php脚本守护进程原理与实现方法详解
2017/07/20 PHP
Laravel5.5 动态切换多语言的操作方式
2019/10/25 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
javascript 必知必会之closure
2009/09/21 Javascript
jquery 分页控件实现代码
2009/11/30 Javascript
javascript面向对象编程(一) 实例代码
2010/06/25 Javascript
三级下拉菜单的js实现代码
2011/05/23 Javascript
jQuery+PHP实现微信转盘抽奖功能的方法
2016/05/25 Javascript
对象转换为原始值的实现方法
2016/06/06 Javascript
使用JS代码实现点击按钮下载文件
2016/11/12 Javascript
AngularJS 教程及实例代码
2017/10/23 Javascript
Vue组件化开发思考
2018/02/02 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
Jquery+javascript实现支付网页数字键盘
2020/12/21 jQuery
[01:10:16]DOTA2上海特级锦标赛B组资格赛#2 Fnatic VS Spirit第一局
2016/02/27 DOTA
python中的一些类型转换函数小结
2013/02/10 Python
python中正则表达式的使用详解
2014/10/17 Python
Python实现二维数组按照某行或列排序的方法【numpy lexsort】
2017/09/22 Python
python实现决策树分类(2)
2018/08/30 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
创业计划书的写作技巧及要点
2014/01/31 职场文书
小学敬老月活动方案
2014/02/11 职场文书
高校教师自荐信范文
2014/03/13 职场文书
高考标语大全
2014/06/05 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
企业法人授权委托书
2014/09/25 职场文书
老人再婚离婚协议书范本
2014/10/27 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
高三语文教学反思
2016/02/16 职场文书
ORM模型框架操作mysql数据库的方法
2021/07/25 MySQL
Nginx虚拟主机的搭建的实现步骤
2022/01/18 Servers