>php教程 >php手册 >php完整验证码代码 - 云翳1895

php完整验证码代码 - 云翳1895

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB원래의
2016-05-20 11:54:26906검색
<span style="color: #000000;">php 
</span><span style="color: #0000ff;">require_once</span> 'string.func.php'<span style="color: #000000;">;
</span><span style="color: #008000;">//</span><span style="color: #008000;">通过GD库做验证码</span><span style="color: #008000;">
/*</span><span style="color: #008000;">*
 *添加验证文字
 * @param int $type
 * @param int $length
</span><span style="color: #008000;">*/</span>
<span style="color: #0000ff;">function</span> buildRandomString(<span style="color: #800080;">$type</span>=1,<span style="color: #800080;">$length</span>=4<span style="color: #000000;">){
    </span><span style="color: #800080;">$row</span>=''<span style="color: #000000;">;
    </span><span style="color: #0000ff;">if</span>(<span style="color: #800080;">$type</span>==1<span style="color: #000000;">){
        </span><span style="color: #800080;">$row</span>=<span style="color: #008080;">join</span>('',<span style="color: #008080;">range</span>(0, 9<span style="color: #000000;">));
    }</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$type</span>==2<span style="color: #000000;">){
        </span><span style="color: #800080;">$row</span>=<span style="color: #008080;">join</span>('', <span style="color: #008080;">array_merge</span>(<span style="color: #008080;">range</span>('a','z'),<span style="color: #008080;">range</span>('A', 'Z'<span style="color: #000000;">)));
    }</span><span style="color: #0000ff;">else</span> <span style="color: #0000ff;">if</span>(<span style="color: #800080;">$type</span>==3<span style="color: #000000;">){
        </span><span style="color: #800080;">$row</span>=<span style="color: #008080;">join</span>('', <span style="color: #008080;">array_merge</span>(<span style="color: #008080;">range</span>('a','z'),<span style="color: #008080;">range</span>('A', 'Z'),<span style="color: #008080;">range</span>(0, 9<span style="color: #000000;">)));
    };
    </span><span style="color: #800080;">$row</span>=<span style="color: #008080;">str_shuffle</span>(<span style="color: #800080;">$row</span><span style="color: #000000;">);
   
    </span><span style="color: #800080;">$row</span>=<span style="color: #008080;">substr</span>(<span style="color: #800080;">$row</span>,0,<span style="color: #800080;">$length</span><span style="color: #000000;">);
    </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">$row</span><span style="color: #000000;">;
}
</span><span style="color: #008000;">/*</span><span style="color: #008000;">*
 * 生成缩略图
 * @param int $type //包含数字或者英文
 * @param int $length 多少个字符
 * @param int $pixel 干扰小点的密度
 * @param int $dst_h 干扰线的密度
 * @param string //验证码在$_SESSION中的名字
 </span><span style="color: #008000;">*/</span>

<span style="color: #0000ff;">function</span> verifyImage(<span style="color: #800080;">$type</span>=1,<span style="color: #800080;">$length</span>=4,<span style="color: #800080;">$pixel</span>=0,<span style="color: #800080;">$line</span>=0,<span style="color: #800080;">$sess_name</span> = "verify"<span style="color: #000000;">){
    </span><span style="color: #008000;">//</span><span style="color: #008000;">session_start();
    //创建画布</span>
    <span style="color: #800080;">$width</span> = 100<span style="color: #000000;">;
    </span><span style="color: #800080;">$height</span> = 40<span style="color: #000000;">;
    </span><span style="color: #800080;">$image</span> = imagecreatetruecolor ( <span style="color: #800080;">$width</span>, <span style="color: #800080;">$height</span><span style="color: #000000;"> );
    </span><span style="color: #800080;">$white</span> = imagecolorallocate ( <span style="color: #800080;">$image</span>, 255, 255, 255<span style="color: #000000;"> );
    </span><span style="color: #800080;">$black</span> = imagecolorallocate ( <span style="color: #800080;">$image</span>, 0, 0, 0<span style="color: #000000;"> );
    </span><span style="color: #008000;">//</span><span style="color: #008000;">用填充矩形填充画布</span>
    imagefilledrectangle ( <span style="color: #800080;">$image</span>, 1, 1, <span style="color: #800080;">$width</span> - 2, <span style="color: #800080;">$height</span> - 2, <span style="color: #800080;">$white</span><span style="color: #000000;"> );
    </span><span style="color: #800080;">$chars</span> = buildRandomString ( <span style="color: #800080;">$type</span>, <span style="color: #800080;">$length</span><span style="color: #000000;"> );
    </span><span style="color: #800080;">$_SESSION</span> [<span style="color: #800080;">$sess_name</span>] = <span style="color: #800080;">$chars</span><span style="color: #000000;">;
    </span><span style="color: #008000;">//</span><span style="color: #008000;">$fontfiles = array ("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF" );</span>
    <span style="color: #800080;">$fontfiles</span> = <span style="color: #0000ff;">array</span> ("SIMKAI.TTF"<span style="color: #000000;"> );
    </span><span style="color: #008000;">//</span><span style="color: #008000;">由于字体文件比较大,就只保留一个字体,如果有需要的同学可以自己添加字体,字体在你的电脑中的fonts文件夹里有,直接运行输入fonts就能看到相应字体</span>
    <span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span> = 0; <span style="color: #800080;">$i</span> $length; <span style="color: #800080;">$i</span> ++<span style="color: #000000;">) {
        </span><span style="color: #800080;">$size</span> = <span style="color: #008080;">mt_rand</span> ( 14, 18<span style="color: #000000;"> );
        </span><span style="color: #800080;">$angle</span> = <span style="color: #008080;">mt_rand</span> ( - 15, 15<span style="color: #000000;"> );
        </span><span style="color: #800080;">$x</span> = 5 + <span style="color: #800080;">$i</span> * <span style="color: #800080;">$size</span><span style="color: #000000;">;
        </span><span style="color: #800080;">$y</span> = <span style="color: #008080;">mt_rand</span> ( 20, 26<span style="color: #000000;"> );
        </span><span style="color: #800080;">$fontfile</span> = "../fonts/" . <span style="color: #800080;">$fontfiles</span> [<span style="color: #008080;">mt_rand</span> ( 0, <span style="color: #008080;">count</span> ( <span style="color: #800080;">$fontfiles</span> ) - 1<span style="color: #000000;"> )];
        </span><span style="color: #800080;">$color</span> = imagecolorallocate ( <span style="color: #800080;">$image</span>, <span style="color: #008080;">mt_rand</span> ( 50, 90 ), <span style="color: #008080;">mt_rand</span> ( 80, 200 ), <span style="color: #008080;">mt_rand</span> ( 90, 180<span style="color: #000000;"> ) );
        </span><span style="color: #800080;">$text</span> = <span style="color: #008080;">substr</span> ( <span style="color: #800080;">$chars</span>, <span style="color: #800080;">$i</span>, 1<span style="color: #000000;"> );
        imagettftext ( </span><span style="color: #800080;">$image</span>, <span style="color: #800080;">$size</span>, <span style="color: #800080;">$angle</span>, <span style="color: #800080;">$x</span>, <span style="color: #800080;">$y</span>, <span style="color: #800080;">$color</span>, <span style="color: #800080;">$fontfile</span>, <span style="color: #800080;">$text</span><span style="color: #000000;"> );
    }
    </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$pixel</span><span style="color: #000000;">) {
        </span><span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span> = 0; <span style="color: #800080;">$i</span> $i ++<span style="color: #000000;">) {
            imagesetpixel ( </span><span style="color: #800080;">$image</span>, <span style="color: #008080;">mt_rand</span> ( 0, <span style="color: #800080;">$width</span> - 1 ), <span style="color: #008080;">mt_rand</span> ( 0, <span style="color: #800080;">$height</span> - 1 ), <span style="color: #800080;">$black</span><span style="color: #000000;"> );
        }
    }
    </span><span style="color: #0000ff;">if</span> (<span style="color: #800080;">$line</span><span style="color: #000000;">) {
        </span><span style="color: #0000ff;">for</span>(<span style="color: #800080;">$i</span> = 1; <span style="color: #800080;">$i</span> $line; <span style="color: #800080;">$i</span> ++<span style="color: #000000;">) {
            </span><span style="color: #800080;">$color</span> = imagecolorallocate ( <span style="color: #800080;">$image</span>, <span style="color: #008080;">mt_rand</span> ( 50, 90 ), <span style="color: #008080;">mt_rand</span> ( 80, 200 ), <span style="color: #008080;">mt_rand</span> ( 90, 180<span style="color: #000000;"> ) );
            imageline ( </span><span style="color: #800080;">$image</span>, <span style="color: #008080;">mt_rand</span> ( 0, <span style="color: #800080;">$width</span> - 1 ), <span style="color: #008080;">mt_rand</span> ( 0, <span style="color: #800080;">$height</span> - 1 ), <span style="color: #008080;">mt_rand</span> ( 0, <span style="color: #800080;">$width</span> - 1 ), <span style="color: #008080;">mt_rand</span> ( 0, <span style="color: #800080;">$height</span> - 1 ), <span style="color: #800080;">$color</span><span style="color: #000000;"> );
        }
    }
    </span><span style="color: #008080;">header</span> ( "content-type:image/gif"<span style="color: #000000;"> );
    imagegif ( </span><span style="color: #800080;">$image</span><span style="color: #000000;"> );
    imagedestroy ( </span><span style="color: #800080;">$image</span><span style="color: #000000;"> );
}</span>

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.