对于验证码,我们并不陌生,随处可见,比如:登录注册、论坛灌水、刷票、密码破解等,主要作用是屏蔽机器请求,保障业务不受机器提交请求干扰。

下面就来写一个验证码demo,使用最常见的字母加数字验证码,加上干扰点和干扰线,使用的GD库生成的,如果你没有安装的话,请自行谷歌安装,另如何判断是否安装启用,请直接在phpinfo页面搜GD库即可

效果如下图:

5ed6c1cb4851a1d7da179d4b1ffa844.png

前台页面

<?phpif(isset($_REQUEST["code"])){    session_start();    if(strtolower($_POST["code"])==$_SESSION["code"]){        echo "<script>alert('正确!')</script>";    }else{        echo "<script>alert('错误!')</script>";    }}?><!doctype html><html><head>    <meta charset="UTF-8">    <meta name="viewport"          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    <meta http-equiv="X-UA-Compatible" content="ie=edge">    <title>验证码</title>    <style>        #code{            border: 1px solid #ccc;            vertical-align: bottom;        }        #refresh{            text-decoration: none;            font-size: .875em;        }    </style></head><body><form action="" method="post">    <p>        验证码:        <img src="code.php?r=<?php echo rand()?>" alt="" id="code">        <a href="javascript:;" id="refresh">看不清?</a>    </p>    <p>        输入验证码:        <input type="text" name="code">    </p>    <input type="submit" value="提交">    <script>        document.getElementById("code").onclick = document.getElementById("refresh").onclick = refresh;        function refresh() {            document.getElementById('code').src='code.php?r='+Math.random()        }    </script></form></body></html>

后台页面

<?php//启动sessionsession_start();$code = "";         //验证码字符串$str = "qwertyuiopasdfghjklzxcvbnm1234567890";  //验证码字符取值范围[a-z0-9]$w = 160;           //图片宽度$h = 40;            //图片高度$num = 4;           //验证码字符数$dotNum = 300;      //干扰点个数$lineNum = rand(3, 5);         //干扰线条数$font = "./api/DejaVuSansMono.ttf";     //设置字体文件$image = imagecreatetruecolor($w, $h);  //创建一张指定宽高的图片$imageColor = imagecolorallocate($image, 255, 255, 255);   //设置背景图片颜色为白色imagefill($image, 0, 0, $imageColor);  //填充图片背景//随机验证码,包含字母和数字for ($i = 0; $i < $num; $i++) {    $fontColor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));  //生成随机字体颜色    $content = substr($str, rand(0, strlen($str)), 1);      //随机取字符集中的值    $code .= $content;    $fontSize = rand(15, 25);                    //字体大小    $x = $i * $w / $num + rand(5, 10);          //指定生成位置X轴偏移量    $y = rand(20, 30);                          //指定生成位置Y轴偏移量    imagettftext($image, $fontSize, 0, $x, $y, $fontColor, $font, $content);}$_SESSION["code"] = $code;  //保存验证码字符串到session中//生成干扰点for ($i = 0; $i < $dotNum; $i++) {    $dotColor = imagecolorallocate($image, rand(0, 255), rand(0, 255), rand(0, 255));    imagesetpixel($image, rand(0, $w), rand(0, $h), $dotColor);}//生成干扰线for ($i = 0; $i < $lineNum; $i++) {    $lineColor = imagecolorallocate($image, rand(0, 100), rand(0, 100), rand(0, 100));    imageline($image, rand(0, $w), rand(0, $h), rand(0, $w), rand(0, $h), $lineColor);}header("content-type:image/png");imagepng($image);imagedestroy($image);

更多相关文章

  1. PHP抓取远程图片教程(包含不带后缀图片)
  2. 利用PHP和百度ai实现文本以及图片的审核
  3. php开发的图片验证码显示失败
  4. php抓取远程图片到本地保存的方法
  5. PHP-Ajax实现异步上传图片到新浪图床
  6. PHP按一定比例压缩图片(保持清晰度)
  7. PHP 文字生成透明图片之路
  8. PHP上传图片到数据库并显示
  9. php实现上传图片功能

随机推荐

  1. Android解析服务器端发来的xml数据
  2. android控件注意点(一)
  3. 利用Android中的SQLite进行CRUD
  4. Android基础入门教程——1.2.2 使用Andro
  5. Android(安卓)自定义控件在Android(安卓)
  6. Android(安卓)调试中 addr2line 工具的使
  7. Android实现ViewPager无限循环效果(二)
  8. Android 滑动手势侦测方法介绍
  9. RxJava RxAndroid(安卓)资源收录
  10. Android Power Management