php生成验证码

PHP 2019年01月26日 15:14 Norsl 589 0

用php来生成验证码,调用方式

<img src="/captcha.php" />    # 路径仅供参考


附上php代码

<?php 
        session_start();
        
        // 画布长度
        $width = 120;
        // 画布高度
        $height = 40;
        // 验证码字符串内容
        $content = "abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        // 生成的验证码位数
        $length = 4;
        // 验证码文字大小
        $fontSize = 18;
        // 验证码
        $captcha = '';

        // 创建真彩画布
        $image = imagecreatetruecolor($width, $height);
        
        // 设置画布颜色
        $bgcolor = imagecolorallocate($image, 255, 255, 255);
        
        // 填充颜色
        imagefill($image, 0, 0, $bgcolor);
        
        // 通过循环取得内容字符
        for ($i=0; $i < $length; $i++) { 
        
        // 随机字体颜色
        $fontColor = imagecolorallocate($image, mt_rand(0,120), mt_rand(0,120), mt_rand(0,120));
        
        // 获取随机字符串
        $temp = substr($content, mt_rand(0, strlen($content)-1), 1);
        
        // 组装字符串
        $captcha .= $temp;
        
        // 设置每个字符的显示位置
        $x = ($i * $width / $length) + mt_rand(5, 10);
        $y = mt_rand(5,20);
        
        // 填充字符串内容到画布
        imagestring($image, $fontSize, $x, $y, $temp, $fontColor);
        
        }
        
        // 存入SESSION
        $_SESSION['captcha'] = $captcha;
        
        // 设置干扰元素
        for ($$i = 0; $i < 200; $i++) {
            $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
            imagesetpixel($image, mt_rand(1, $width - 1), mt_rand(1, $height - 1), $pointcolor);
        }
        
        for ($i = 0; $i < $length - 1; $i++) {
            $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
            imageline($image, mt_rand(1, $width - 1), mt_rand(1, $height - 1), mt_rand(1, $width - 1), mt_rand(1, $height - 1), $linecolor);
        }
        
        // 设置输出格式
        header('Content-type:image/png');
        
        // 输出到浏览器
        imagepng($image);
        
        // 销毁
        imagedestroy($image);
?>


说点什么吗?

你的电子邮箱地址不会被公开。必填项已用 * 著名

*
*
验证码

Norsl の 个人名片

职业:web开发

现居:四川 成都

Git:https://gitee.com/norsl

邮箱:3136904131@qq.com

最新评论

  • Norsl : 当时我是把ip加黑了,然后前端加了关键字验证。现在他去祸害被人去了。。。
  • 林三 : 镜像是无法根治的,我们能做的就是保护自己的合法排名,然后要适当的申明自己是原创。
  • Norsl : 就是跟目标站内容一致的站点,会定期同步目标站的数据。
  • 叶夕青兮 : 没太搞明白,什么是镜像站
  • vultr : 估计是人家练手的
  • Norsl : 现在这个已经镜像别的网站去了,很迷
  • Norsl : 我也不知道为什么会被镜像,我网站流量算是很少的了,也是无意中发现的。
  • zgcwkj : 项目大佬,还有人镜像,我连镜像是什么都不知道!!!
  • Norsl : 我也有备份的习惯的,但备份脚本居然没运行,没有加到定时任务,怪我疏忽了。谢谢提醒
  • 心灵博客 : 我安装一开始就关闭binlog,耗资源,不过我有每天备份。 另外建议隔段时间做个快照。