ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

php生成验证码

2021-01-13 03:32:23  阅读:188  来源: 互联网

标签:rand code image 验证码 生成 画布 mt 100 php


用到php扩展GD库,如果没有开启就在php.ini配置文件开启。

具体函数无需死记硬背,只需明白具体步骤流程即可(函数可以去查手册GD库的 图像处理函数)

 

验证码代码(简单实现)

<?php 
    /**
     * 生成验证码类
     */
    class Captcha
    {
        private $width = 100; //画布宽度
        private $height = 30; //画布高度
        private $number = 4;  //验证码字符个数
        private $font_file = '/font/tahoma.ttf'; //验证码字体文件
        private $font_size = 20; //验证码字体大小

        public function __set($p,$v)
        {
            if (property_exists($this,$p)) {
                $this->$p = $v;
            }
        }
        public function __get($p)
        {
            if (property_exists($this,$p)) {
                return $this->$p;
            }
        }

        //绘制验证码函数
        public function makeImage()
        {
            //1. 创建画布,背景色应该是随机,尽量背景色浅一些
            $image = imagecreatetruecolor($this->width, $this->height);

            //2. 给画布分配颜色
            $color = imagecolorallocate($image, mt_rand(100,255), mt_rand(100,255), mt_rand(100,255)); //创建颜色
            imagefill($image, 0, 0, $color);//画布填充

            //3.开始绘制文字
            $code = $this->makeCode();//生成的随机字符串
            //imagettftext函数参数说明如下:
            //参数1:画布资源 参数2:字体大小 参数3:旋转角度 参数4:x坐标 
            //参数5:y坐标 参数6:字体颜色 参数:7:字体文件 参数8:要显示的字符
            for ($i=0; $i < strlen($code); $i++) { 
                imagettftext($image, $this->font_size, mt_rand(-30,30), $this->width/$this->number*$i+5, 25, mt_rand(0,100), $this->font_file, $code[$i]);
            }
            
            //4.绘制100个干扰像素点
            //imagesetpixel 函数 在画布上画一个单一的一个点
            for ($i=0; $i < 100; $i++) { 
                imagesetpixel($image, mt_rand(0,$this->width), mt_rand(0,$this->height), mt_rand(0,100));
            }

            //5.输出到浏览器
            //ob_clean(); 函数功能是:丢弃输出缓冲区中的内容
            header("Content-Type:image/png");
            imagepng($image);

            //6. 销毁图形资源
            imagedestroy($image);

        }

        //生成随机字符
        public function makeCode()
        {
            //大写字母,range()用来生成一个数组,包含从指定位置开始、结束
            $upper = range('A', 'Z');
            //小写字母
            $lower = range('a', 'z');
            //数字
            $number = range(3, 9);
            //以上3个数组合并
            $code = array_merge($upper,$lower,$number);
            //打乱数组顺序
            shuffle($code);
            //根据属性中指定的字符个数,创建字符
            $str = '';
            for ($i=0; $i < $this->number; $i++) { 
                $str .= $code[$i];
            }
            return $str;
        }
        
    }
    
 ?>

页面引用格式

1 <img src="yzm.php"> <!-- 验证码文件这样引入 -->

效果图:

 

标签:rand,code,image,验证码,生成,画布,mt,100,php
来源: https://www.cnblogs.com/qiu1990/p/14270171.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有