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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
php 代码优化的42条建议 推荐
Sep 25 PHP
PHP中的str_repeat函数在JavaScript中的实现
Sep 16 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
Dec 25 PHP
利用php生成验证码
Feb 23 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
May 03 PHP
Laravle eloquent 多对多模型关联实例详解
Nov 22 PHP
自写的利用PDO对mysql数据库增删改查操作类
Feb 19 PHP
PHP析构函数destruct与垃圾回收机制的讲解
Mar 22 PHP
PhpStorm连接服务器并实现自动上传功能
Dec 09 PHP
PHP7移除的扩展和SAPI
Mar 09 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中的观察者模式
2010/03/24 PHP
php操作SVN版本服务器类代码
2011/11/27 PHP
PHP中使用break跳出多重循环代码实例
2015/01/21 PHP
PHP中功能强大却很少使用的函数实例小结
2016/11/10 PHP
突发奇想的一个jquery插件
2010/11/19 Javascript
range 标准化之获取
2011/08/28 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
2014/05/08 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
2016年最热门的15 款代码语法高亮工具,美化你的代码
2016/01/06 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
javascript 操作cookies详解及实例
2017/02/22 Javascript
Vue底层实现原理总结
2018/02/17 Javascript
从vue源码看props的用法
2019/01/09 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
如何使用gpu.js改善JavaScript的性能
2020/12/01 Javascript
原生js拖拽功能制作滑动条实例代码
2021/02/05 Javascript
Python文件操作类操作实例详解
2014/07/11 Python
浅谈python中截取字符函数strip,lstrip,rstrip
2015/07/17 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
详解Python 正则表达式模块
2018/11/05 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
python实现跨excel sheet复制代码实例
2020/03/03 Python
PyCharm最新激活码(2020/10/27全网最新)
2020/10/27 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Ralph Lauren拉夫·劳伦美国官网:带有浓郁美国气息的高品味时装品牌
2017/11/01 全球购物
美工的岗位职责
2013/11/14 职场文书
公司周年庆典策划方案
2014/05/17 职场文书
小学安全工作汇报材料
2014/08/19 职场文书
运动会演讲稿50字
2014/08/25 职场文书
中层领导干部群众路线对照检查材料思想汇报
2014/10/02 职场文书
2014财务年终工作总结
2014/12/08 职场文书
2014年工商所工作总结
2014/12/09 职场文书
Python基础之操作MySQL数据库
2021/05/06 Python
MySQL查看表和清空表的常用命令总结
2021/05/26 MySQL
科学家研发出新型速效酶,可在 24 小时内降解塑料制品
2022/04/29 数码科技