PHP生成随机验证码

1585364631
2022-05-10 / 0 评论 / 193 阅读 / 正在检测是否收录...

PHP生成随机验证码

源代码:

<?php
    // $img_w 图片宽
    // $img_h 图片高
    // $char_len 验证码字符数
    // $font 字体大小(内置字体1-5)
    // $px 随机干扰像素点
    // $line 随机线条数
    function getCode($img_w=100,$img_h=40,$char_len=5,$font=5,$px=80,$line=10){
        //生成码值数组,不需要0,避免与字母o冲突
        $char = array_merge(range("A","Z"),range("a","z"),range("1","9"));
        //随机获取$char_len个码值的键
        $rand_keys = array_rand($char,$char_len);
        //判断当码值长度为1时,将其放入数组中
        if($char_len == 1){
            $rand_keys = array($rand_keys);
        }
        //打乱随机获取的码值键的数组
        shuffle($rand_keys);
        //根据键获取对应的码值,并拼接成字符串
        $code='';
        foreach($rand_keys as $i){
            $code = $code . $char[$i];
        }
        //----1 生成画布
        $img = imageCreateTrueColor($img_w,$img_h);
        //设置背景
        $bg_color = imageColorAllocate($img,0xcc,0xcc,0xcc);
        imageFill($img,0,0,$bg_color);
        //干扰像素
        for($i=0;$i<=$px;$i++){
            $color = imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
            imageSetPixel($img,mt_rand(0,$img_w),mt_rand(0,$img_h),$color);
        }
        for($i=0;$i<=$line;$i++){
            $color = imageColorAllocate($img,mt_rand(0,255),mt_rand(0,255),mt_rand(0,255));
            imageline($img,mt_rand(0,$img_w),mt_rand(0,$img_h),mt_rand(0,$img_w),mt_rand(0,$img_h),$color);
        }
        //矩形边框
        $rect_color = imageColorAllocate($img,0x90,0x90,0x90);
        imageRectangle($img,0,0,$img_w-1,$img_h-1,$rect_color);
        //----2 操作画布
        //设定字符串颜色
        $str_color = imageColorAllocate($img,mt_rand(0,100),mt_rand(0,100),mt_rand(0,100));
        //设定字符串位置
        $font_w = imageFontWidth($font);
        $font_h = imageFontHeight($font);
        $str_w = $font_w * $char_len;
        imageString($img,$font,($img_w-$str_w)/2,($img_h-$font_h)/2,$code,$str_color);
        $resulf = array(
            "code" => $code,
            "img" => $img
        );
        return $resulf;
    }
    
    
    // $res['code'] 验证码
    // $res['img'] 图片
    $res = getCode();
    session_start();
    $_SESSION['captcha_code'] = $res['code'];
    header("Content-Type: image/png");
    imagepng($res['img']);
    imagedestroy($res['img']);
?>
0

评论 (0)

取消