PHP验证码程序

feng157aaa 发布于 2016/04/12 09:18
阅读 259
收藏 2
PHP

这个是程序部分,verifyCode.php

<?php

    //随机字符串种子,可以换成字母或其他英文字符
    $glbVerifySeed = "123ab4567cde89ABCthixDEFHpKZ";
    main();
        
    function main() {
        session_start();
        
        $verifyCode = getRandomCode();
        $_SESSION["verifyCode"] = $verifyCode;
        $imgWidth = $_REQUEST["width"];
        $imgHeight = $_REQUEST["height"];
        $imgFont = $_REQUEST["font"];
        
        if($imgWidth == "") $imgWidth = 70;
        if($imgHeight == "") $imgHeight = 18;
        if($imgFont == "") $imgFont = 5;
        doOutputImg($verifyCode, $imgWidth, $imgHeight, $imgFont);
    }
    
    //获取随机数字字符串
    function getRandomCode($length=5) {
        global $glbVerifySeed;
        
        $bgnIdx = 0;
        $endIdx = strlen($glbVerifySeed)-1;
        
        $code = "";
        for($i=0; $i<$length; $i++) {
            $curPos = rand($bgnIdx, $endIdx);
            $code .= substr($glbVerifySeed, $curPos, 1);
        }
        
        return $code;
    }
    
    //输出校验码图像
    function doOutputImg($string, $imgWidth, $imgHeight, $imgFont,
        $imgFgColorArr=array(0,0,0), $imgBgColorArr=array(255,255,255)) {
        $image = imagecreatetruecolor($imgWidth, $imgHeight);

        //用白色背景加黑色边框画个方框
        $backColor = imagecolorallocate($image, 255, 255, 255);
        $borderColor = imagecolorallocate($image, 0, 0, 0);
        imagefilledrectangle($image, 0, 0, $imgWidth - 1, $imgHeight - 1, $backColor);
        imagerectangle($image, 0, 0, $imgWidth - 1, $imgHeight - 1, $borderColor);

        $imgFgColor = imagecolorallocate ($image, $imgFgColorArr[0], $imgFgColorArr[1], $imgFgColorArr[2]);
        doDrawStr($image, $string, $imgFgColor, $imgFont);
        doPollute($image, 64);

        header('Content-type: image/png');
        imagepng($image);
        imagedestroy($image);
    }

    //画出校验码
    function doDrawStr($image, $string, $color, $imgFont) {
        $imgWidth = imagesx($image);
        $imgHeight = imagesy($image);
        
        $count = strlen($string);
        $xpace = ($imgWidth/$count);
        
        $x = ($xpace-6)/2;
        $y = ($imgHeight/2-8);
        for ($p = 0; $p<$count;  $p ++) {
            $xoff = rand(-2, +2);
            $yoff = rand(-2, +2);
            $curChar = substr($string, $p, 1);
            imagestring($image, $imgFont, $x+$xoff, $y+$yoff, $curChar, $color);
            $x += $xpace;
        }

        return 0;
    }
    
    //画出一些杂点
    function doPollute($image, $times) {   
        $imgWidth = imagesx($image);
        $imgHeight = imagesy($image);
        for($j=0; $j<$times; $j++) {
            $x = rand(0, $imgWidth);
            $y = rand(0, $imgHeight);
            
            $color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));
            imagesetpixel($image, $x, $y, $color);
        }
    }
?>

HTML页面,验证码上面直接点刷新

           <tr>
              <td height="29"><input name="auth_num" type="text" class="bor" id="auth_num" size="8" />
                <img src="verifyCode.php?width=80&height=20&font=5" onclick="this.src='verifyCode.php'" /></td>
              </tr>

加载中
0
a
astars
这是在贡献代码?
返回顶部
顶部