dmz社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5196|回复: 110

[功能实现] php验证码功能实现 附完整源代码

  [复制链接]
  • TA的每日心情
    奋斗
    昨天 05:50
  • 签到天数: 235 天

    [LV.7]常住居民III

    4425

    主题

    1430

    帖子

    9850

    积分

    会|员

    Rank: 9Rank: 9Rank: 9

    积分
    9850
    发表于 2018-12-27 00:58:47 | 显示全部楼层 |阅读模式

    本站资源全部免费,回复即可查看下载地址!

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

    x
    [PHP] 纯文本查看 复制代码
    <?php 
    require_once 'string.func.php';
    //通过GD库做验证码
    /**
     *添加验证文字
     * @param int $type
     * @param int $length
    */
    function buildRandomString($type=1,$length=4){
        $row='';
        if($type==1){
            $row=join('',range(0, 9));
        }else if($type==2){
            $row=join('', array_merge(range('a','z'),range('A', 'Z')));
        }else if($type==3){
            $row=join('', array_merge(range('a','z'),range('A', 'Z'),range(0, 9)));
        };
        $row=str_shuffle($row);
       
        $row=substr($row,0,$length);
        return $row;
    }
    /**
     * 生成缩略图
     * @param int $type //包含数字或者英文
     * @param int $length 多少个字符
     * @param int $pixel 干扰小点的密度
     * @param int $dst_h 干扰线的密度
     * @param string //验证码在$_SESSION中的名字
     */
    
    function verifyImage($type=1,$length=4,$pixel=0,$line=0,$sess_name = "verify"){
        //session_start();
        //创建画布
        $width = 100;
        $height = 40;
        $image = imagecreatetruecolor ( $width, $height );
        $white = imagecolorallocate ( $image, 255, 255, 255 );
        $black = imagecolorallocate ( $image, 0, 0, 0 );
        //用填充矩形填充画布
        imagefilledrectangle ( $image, 1, 1, $width - 2, $height - 2, $white );
        $chars = buildRandomString ( $type, $length );
        $_SESSION [$sess_name] = $chars;
        //$fontfiles = array ("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF" );
        $fontfiles = array ("SIMKAI.TTF" );
        //由于字体文件比较大,就只保留一个字体,如果有需要的同学可以自己添加字体,字体在你的电脑中的fonts文件夹里有,直接运行输入fonts就能看到相应字体
        for($i = 0; $i < $length; $i ++) {
            $size = mt_rand ( 14, 18 );
            $angle = mt_rand ( - 15, 15 );
            $x = 5 + $i * $size;
            $y = mt_rand ( 20, 26 );
            $fontfile = "../fonts/" . $fontfiles [mt_rand ( 0, count ( $fontfiles ) - 1 )];
            $color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );
            $text = substr ( $chars, $i, 1 );
            imagettftext ( $image, $size, $angle, $x, $y, $color, $fontfile, $text );
        }
        if ($pixel) {
            for($i = 0; $i < 50; $i ++) {
                imagesetpixel ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $black );
            }
        }
        if ($line) {
            for($i = 1; $i < $line; $i ++) {
                $color = imagecolorallocate ( $image, mt_rand ( 50, 90 ), mt_rand ( 80, 200 ), mt_rand ( 90, 180 ) );
                imageline ( $image, mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), mt_rand ( 0, $width - 1 ), mt_rand ( 0, $height - 1 ), $color );
            }
        }
        header ( "content-type:image/gif" );
        imagegif ( $image );
        imagedestroy ( $image );
    }

    主要要点:
    • 如果前面没有申明session_start();则需要申明;
    • 字体可以在cmf输入fonts下载到自己定义的fonts文件夹;
    • $_SESSION [$sess_name]可以通过$_POST获得用户输入的验证码进行比较。

    回复

    使用道具 举报

    该用户从未签到

    18

    主题

    7874

    帖子

    1016

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    1016

    发表于 2018-12-27 21:15:26 | 显示全部楼层
    过来看看的

    该用户从未签到

    2

    主题

    7561

    帖子

    1054

    积分

    技冠群雄

    Rank: 6Rank: 6

    积分
    1054

    发表于 2018-12-28 03:04:18 | 显示全部楼层
    相当不错,感谢无私分享精神!
  • TA的每日心情
    慵懒
    2021-10-21 17:36
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    6

    主题

    3589

    帖子

    202

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    202

    发表于 2018-12-28 18:08:41 | 显示全部楼层
    支持一下:lol

    该用户从未签到

    1

    主题

    3520

    帖子

    -8

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    -8

    发表于 2018-12-29 00:26:17 | 显示全部楼层
    学习了,谢谢分享、、、

    该用户从未签到

    24

    主题

    7885

    帖子

    962

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    962

    发表于 2019-1-3 07:09:25 | 显示全部楼层
    路过,支持一下啦

    该用户从未签到

    2

    主题

    3508

    帖子

    -6

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    -6

    发表于 2019-1-3 11:27:42 | 显示全部楼层
    没看完~~~~~~ 先顶,好同志

    该用户从未签到

    37

    主题

    7917

    帖子

    1069

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    1069

    发表于 2019-1-3 12:39:35 | 显示全部楼层
    有竞争才有进步嘛

    该用户从未签到

    3

    主题

    3589

    帖子

    6

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    6

    发表于 2019-1-7 12:13:01 | 显示全部楼层
    谢谢楼主,共同发展
  • TA的每日心情

    2024-2-20 11:15
  • 签到天数: 11 天

    [LV.3]偶尔看看II

    878

    主题

    4343

    帖子

    3987

    积分

    终身会员[A]

    Rank: 7Rank: 7Rank: 7

    积分
    3987

    发表于 2019-1-7 14:47:47 | 显示全部楼层
    相当不错,感谢无私分享精神!
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|小黑屋|本站代理|dmz社区

    GMT+8, 2024-4-20 11:07 , Processed in 0.183955 second(s), 42 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表