请选择 进入手机版 | 继续访问电脑版
绿茶科技社区

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
几乎所有的网站登录页都会有验证码,验证码是一种安全保护机制,用于防止垃圾注册机大量注册用户账号占用服务器内存从而使服务器瘫痪。接下来通过本文给大家介绍PHP 绘制网站登录首页图片验证码,需要的朋友参考下
几乎所有的网站登录页都会有验证码,验证码是一种安全保护机制,在注册时要求必须有人工操作进行验证,用于防止垃圾注册机大量注册用户账号占用服务器内存从而使服务器瘫痪。
图片验证码的实现十分简单。首先从指定字符集合中随机抽取固定数目的字符,以一种不规则的方法画在画布上,再适当添加一些干扰点和干扰元素,最后将图片输出,一张崭新的验证码就完成了。
先给大家展示下生成的验证码:

点击刷新:

如果大家对实现效果非常满意,请继续往下看。

前端代码如下:
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html;charset=utf-8">
  5. <title>This is a test!</title>
  6. <link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
  7. </head>
  8. <body>
  9. <form name="form">
  10. <input type="text" placeholder="账号"/><br/>
  11. <input type="password" placeholder="密码"/><br/>
  12. <input type="text" placeholder="验证码"/>
  13. <img id="verImg" src="libs/verification.php"/>
  14. <a href="#" class="change" onclick="changeVer()">点击刷新</a><br/>
  15. <input type="submit" value="登录"/>
  16. </form>
  17. <script type="text/javascript">
  18. //刷新验证码
  19. function changeVer(){
  20. document.getElementById("verImg").src="libs/verification.php?tmp="+Math.random();
  21. }
  22. </script>
  23. </body>
  24. </html>
复制代码
php脚本文件验证码的代码如下:
  1. <?php
  2. session_start();
  3. //开启session记录验证码数据
  4. vCode(4, 15);//设置验证码的字符个数和图片基础宽度
  5. //vCode 字符数目,字体大小,图片宽度、高度
  6. function vCode($num = 4, $size = 20, $width = 0, $height = 0) {
  7. !$width && $width = $num * $size * 4 / 5 + 15;
  8. !$height && $height = $size + 10;
  9. //设置验证码字符集合
  10. $str = "23456789abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVW";
  11. //保存获取的验证码
  12. $code = '';
  13. //随机选取字符
  14. for ($i = 0; $i < $num; $i++) {
  15. $code .= $str[mt_rand(0, strlen($str)-1)];
  16. }
  17. //创建验证码画布
  18. $im = imagecreatetruecolor($width, $height);
  19. //背景色
  20. $back_color = imagecolorallocate($im, mt_rand(0,100),mt_rand(0,100), mt_rand(0,100));
  21. //文本色
  22. $text_color = imagecolorallocate($im, mt_rand(100, 255), mt_rand(100, 255), mt_rand(100, 255));
  23. imagefilledrectangle($im, 0, 0, $width, $height, $back_color);
  24. // 画干扰线
  25. for($i = 0;$i < 5;$i++) {
  26. $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  27. imagearc($im, mt_rand(- $width, $width), mt_rand(- $height, $height), mt_rand(30, $width * 2), mt_rand(20, $height * 2), mt_rand(0, 360), mt_rand(0, 360), $font_color);
  28. }
  29. // 画干扰点
  30. for($i = 0;$i < 50;$i++) {
  31. $font_color = imagecolorallocate($im, mt_rand(0, 255), mt_rand(0, 255), mt_rand(0, 255));
  32. imagesetpixel($im, mt_rand(0, $width), mt_rand(0, $height), $font_color);
  33. }
  34. //随机旋转角度数组
  35. $array=array(5,4,3,2,1,0,-1,-2,-3,-4,-5);
  36. // 输出验证码
  37. // imagefttext(image, size, angle, x, y, color, fontfile, text)
  38. @imagefttext($im, $size , array_rand($array), 12, $size + 6, $text_color, 'c:\WINDOWS\Fonts\simsun.ttc', $code);
  39. $_SESSION["VerifyCode"]=$code;
  40. //no-cache在每次请求时都会访问服务器
  41. //max-age在请求1s后再次请求会再次访问服务器,must-revalidate则第一发送请求会访问服务器,之后不会再访问服务器
  42. // header("Cache-Control: max-age=1, s-maxage=1, no-cache, must-revalidate");
  43. header("Cache-Control: no-cache");
  44. header("Content-type: image/png;charset=gb2312");
  45. //将图片转化为png格式
  46. imagepng($im);
  47. imagedestroy($im);
  48. }
  49. ?>
复制代码
好了,关于小编给大家介绍的php绘制图片验证就给大家介绍这么多,希望对大家有所帮助!



分享到 :
0 人收藏

2 个回复

倒序浏览
sparkdev  高级会员 | 2019-2-13 16:11:24
楼下的接上
Teddys Knowledg  高级会员 | 2019-3-12 13:22:52
看帖要回,回帖才健康,在踩踩,楼主辛苦了!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

举报|Archiver|手机版|小黑屋|Lvchakeji Inc.  

Powered by Discuz! X3.3 © 2001-2016 Comsenz Inc.

返回顶部