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

这篇文章主要介绍了PHP简单验证码功能机制,结合实例形式深入浅出的分析了php验证码的原理、实现步骤及相关操作技巧,需要的朋友可以参考下。

本文实例讲述了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,写入以下代码

  1. <?php
  2. /**
  3. * =======================================
  4. * Created by WeiBang Technology.
  5. * User: Wei ZhiHua
  6. * Date: 2016/10/12 0020
  7. * Time: 下午 4:14
  8. * Power: 实现验证码功能
  9. * =======================================
  10. */
  11. //开启session
  12. session_start();
  13. //创建一个大小为 100*30 的验证码
  14. $image = imagecreatetruecolor(100, 30);
  15. $bgcolor = imagecolorallocate($image, 255, 255, 255);
  16. imagefill($image, 0, 0, $bgcolor);
  17. $captch_code = '';
  18. for ($i = 0; $i < 4; $i++) {
  19. $fontsize = 6;
  20. $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
  21. $data = 'abcdefghijkmnpqrstuvwxy3456789';
  22. $fontcontent = substr($data, rand(0, strlen($data) - 1), 1);
  23. $captch_code .= $fontcontent;
  24. $x = ($i * 100 / 4) + rand(5, 10);
  25. $y = rand(5, 10);
  26. imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
  27. }
  28. //就生成的验证码保存到session
  29. $_SESSION['authcode'] = $captch_code;
  30. //在图片上增加点干扰元素
  31. for ($i = 0; $i < 200; $i++) {
  32. $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
  33. imagesetpixel($image, rand(1, 99), rand(1, 29), $pointcolor);
  34. }
  35. //在图片上增加线干扰元素
  36. for ($i = 0; $i < 3; $i++) {
  37. $linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
  38. imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1, 29), $linecolor);
  39. }
  40. //设置头
  41. header('content-type:image/png');
  42. imagepng($image);
  43. imagedestroy($image);
  44. ?>

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

  1. <?php
  2. /**
  3. * =======================================
  4. * Created by WeiBang Technology.
  5. * User: Wei ZhiHua
  6. * Date: 2016/10/12 0021
  7. * Time: 下午 4:14
  8. * Power: 实现验证码功能
  9. * =======================================
  10. */
  11. if (isset($_REQUEST['authcode'])) {
  12. session_start();
  13. if (strtolower($_REQUEST['authcode']) == $_SESSION['authcode']) {
  14. echo "输入正确!";
  15. } else {
  16. echo "输入错误!";
  17. }
  18. exit();
  19. }
  20. ?>
  21. <!DOCTYPE html>
  22. <html>
  23. <head>
  24. <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
  25. <title>确认验证码</title>
  26. </head>
  27. <body>
  28. <form method="post" action="./form.php">
  29. <p>验证码图片:
  30. <img src="./captcha.php?r=<?php echo rand(); ?>" width=100 height=30>
  31. <a href="javascript:void(0)" rel="external nofollow"
  32. onClick="document.getElementById('captcha_img').src='./captcha.php?r='+Math.random()">换一个?</a>
  33. </p>
  34. <p>请输入图片中的内容:<input type="text" name="authcode" value=""/></p>
  35. <p><input type="submit" value="提交" ></p>
  36. </form>
  37. </body>
  38. </html>

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