美文网首页
实例:验证码功能

实例:验证码功能

作者: z1挂东南 | 来源:发表于2018-09-03 08:59 被阅读29次

2018.09.03
.
.

目录结构:

verify(文件夹)
├─index.php     主页文件
├─captcha.php     生成验证码文件
├─simhei.ttf     验证码所用字体(黑体),其他字体也可以
├─verify.php     对比验证码


index.php:

<!DOCTYPE>
<html>
<head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
    <title>验证码</title>
    <meta name="description" content=""/>
    <meta name="keywords" content=""/>
    <link href="../bootstrap-3.3.7/dist/css/bootstrap.min.css" rel="stylesheet"/>
    <script type="text/javascript" src="../bootstrap-3.3.7/dist/js/tests/vender/jquery.min.js"></script>
    <script type="text/javascript" src="../bootstrap-3.3.7/dist/js/bootstrap.min.js"></script>
</head>

<body>
    <form class="form-group" action="verify.php" method="post">
        <div class="clearfix">
            <div class="form-group has-feedback pull-left" style="width:180px;">
                <input class="form-control" type="text" name="verify" id="verify" placeholder="验证码" />
            </div>
            <img class="pull-left img-rounded" id="code" style="border:1px solid #ccc" width="100" src="captcha.php" alt="" onclick="this.src='captcha.php?'+Math.random()"/>
        </div>
        <div class="clearfix">
            <button class="pull-left btn btn-primary btn-sm" type="submit">
                <i class="glyphicon glyphicon-log-in">&nbsp;</i>Login
            </button>
        </div>
    </form>
</body>
</html>

captcha.php:

<?php

$w = 100;
$h = 30;
$len = 4;
captcha($w, $h, $len);

function captcha($w, $h, $len){
    //1.生成画布
    $img = imagecreatetruecolor($w, $h);

    //2.填充背景颜色
    $bg = imagecolorallocate($img, mt_rand(201,255), mt_rand(201,255), mt_rand(201,255));
    imagefill($img, 0, 0, $bg);
    //3.绘制随机验证码
    $code = get_code($len);
    session_start();
    $_SESSION['code'] = $code; //将验证码写进session文件中

    for($i=0; $i<strlen($code); $i++){
        $color = imagecolorallocate($img, mt_rand(110,200), mt_rand(110,200), mt_rand(110,200));
        imagettftext($img, mt_rand(18,26), mt_rand(-20,20), 18*($i+1), 25, $color, 'simhei.ttf', $code[$i]);
    }

    //4.增加干扰线
    for($i=0; $i<strlen($code); $i++){
        $color = imagecolorallocate($img, mt_rand(110,200), mt_rand(110,200), mt_rand(110,200));
        imageline($img, mt_rand(0,100), mt_rand(0,30),  mt_rand(0,100), mt_rand(0,30), $color);
    }

    //测试
    header('Content-Type:image/jpeg');
    imagejpeg($img);
}


//生成随机字符串
function get_code($len){
    $charset = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ23456789'; //57
    $code = '';
    for($i=0; $i<$len; $i++){
        $code .= $charset[mt_rand(0, 56)];
    }
    return $code;
}

字体文件:
打开我的电脑->C盘->windows->Fonts,在Fonts目录下就可以找到字体文件,也可以在网上下载

verify.php:

<?php

$verify = $_POST['verify'];

session_start();
$code = $_SESSION['code'];

if(strtolower($verify) != strtolower($code)){
    my_alert('你他妈瞎啊!', './captcha.html');
}else{
    my_alert('验证成功!', '../calculator.php');
}

function my_alert($str,$url){
    echo '<script>alert("'.$str.'");location.href="'.$url.'";</script>';
}

相关文章

网友评论

      本文标题:实例:验证码功能

      本文链接:https://www.haomeiwen.com/subject/gktbwftx.html