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 相关文章推荐
PHP开发过程中常用函数收藏
Dec 14 PHP
php递归获取目录内文件(包含子目录)封装类分享
Dec 25 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
Aug 25 PHP
Yii数据模型中rules类验证器用法分析
Jul 15 PHP
Yii2创建控制器(createController)方法详解
Jul 23 PHP
php获取字符串前几位的实例(substr返回字符串的子串用法)
Mar 08 PHP
Yii2.0中使用js异步删除示例
Mar 10 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
Apr 19 PHP
Symfony2针对输入时间进行查询的方法分析
Jun 28 PHP
基于php编程规范(详解)
Aug 17 PHP
PHP substr()函数参数解释及用法讲解
Nov 23 PHP
swoole锁的机制代码实例讲解
Mar 04 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代码优化及php相关问题总结
2006/10/09 PHP
基于curl数据采集之正则处理函数get_matches的使用
2013/04/28 PHP
PHP imagegrabscreen和imagegrabwindow(截取网站缩略图)的实例代码
2013/11/07 PHP
PHP循环结构实例讲解
2014/02/10 PHP
PHP实现基于文本的摩斯电码生成器
2016/01/11 PHP
laravel5.1 ajax post 传值_token示例
2019/10/24 PHP
javascript编程起步(第一课)
2007/01/10 Javascript
jQuery帮助之筛选查找 children([expr])
2011/01/31 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript中的普通函数与构造函数比较
2015/04/07 Javascript
javascript原型模式用法实例详解
2015/06/04 Javascript
基于jQuery实现简单的折叠菜单效果
2015/11/23 Javascript
跨域资源共享 CORS 详解
2016/04/26 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
浅谈Vue.js
2017/03/02 Javascript
Vue实现typeahead组件功能(非常靠谱)
2017/08/26 Javascript
微信小程序图片选择区域裁剪实现方法
2017/12/02 Javascript
Bootstrap fileinput 上传新文件移除时触发服务器同步删除的配置
2018/10/08 Javascript
微信 jssdk 签名错误invalid signature的解决方法
2019/01/14 Javascript
序列化模块json代码实例详解
2020/03/03 Javascript
Python升级提示Tkinter模块找不到的解决方法
2014/08/22 Python
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
在Python的struct模块中进行数据格式转换的方法
2015/06/17 Python
Windows系统下多版本pip的共存问题详解
2017/10/10 Python
Python2.X/Python3.X中urllib库区别讲解
2017/12/19 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
Python list列表中删除多个重复元素操作示例
2019/02/27 Python
基于python3 的百度图片下载器的实现代码
2019/11/05 Python
pyspark 随机森林的实现
2020/04/24 Python
Python实现动态循环输出文字功能
2020/05/07 Python
python使用正则表达式匹配txt特定字符串(有换行)
2020/12/09 Python
学生出入校管理制度
2014/01/16 职场文书
中学生获奖感言
2014/02/04 职场文书
烟台的海导游词
2015/02/02 职场文书
谢师宴邀请函
2015/02/02 职场文书
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python