laravel - 验证码

完成白底黑字验证码,随机英文字母

//后台
 /**
     * 生成图片验证码
     *
     */
    public function setPicture()
    {
        // session有效
        session_start();
        $code = '';
        //画布大小
        $image = imagecreate(200, 60);
        //创建前景色是黑色
        $color = imagecolorallocate($image, 0, 0, 0);
        //设置背景颜色
        $bg = imagecolorallocate($image, 255, 255, 255);
        //填充背景颜色
        imagefill($image, 0, 0, $bg);
        //清除缓冲区内容,这样即便有BOM头,也不会影响图片
        ob_clean();
        //输出一个图片类型为image/png的HTTP 报头
        header("Content-Type: image/png");
        //在图片上显示4个数字,在x轴上等距间隔,在y轴上保持高度一致。
        $length = 5;
        $random = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $arr = str_split($random);

        for ($i = 0; $i < $length; $i++) {
            //从数组中随意取值
            $num = array_rand($arr, 1);
            $str = $random[$num];
            $code .= $str;
        }
        //calibrib.ttf 为字体文件,可在电脑库里找到合适的字体文件
        $fontfile = 'website/public' . '/calibrib.ttf';
        imagettftext($image, 38, 0, 0, 45, $color, $fontfile, $code);
        $_SESSION['code'] = $code;//存储在session里
        //最后在网页在打印出带数字的图片
        imagepng($image);
    }
//html
          <div class="code-image">
               <image src="{{route('setpicture')}}" class="codeimage"></image>
          </div>
          <div class="code-refresh">
                <a href="javascript:void(0);" onclick="onRefresh()">刷新</a>
          </div>

//js
<script>
 var srcurl = '{{route('setpicture')}}';
/**
 * 刷新二维码
 *
 */
function onRefresh() {
    $('.codeimage').attr('src', srcurl);
}
</script>

//后台获取验证码
//验证码判断对错
        session_start();
        $code = Input::get('code');
        $codeOrigin = $_SESSION['code'];
        if ($code != $codeOrigin) {
            return Response::json(['status' => 10, 'error' => '验证码错误']);
        }
posted @ 2020-01-13 11:24  gggggggxin  阅读(116)  评论(0编辑  收藏  举报