<?<span>php </span><span>require_once</span> 'string.func.php'<span>; </span><span>//</span><span>通过GD库做验证码</span><span> /*</span><span>* *添加验证文字 * @param int $type * @param int $length </span><span>*/</span> <span>function</span> buildRandomString(<span>$type</span>=1,<span>$length</span>=4<span>){ </span><span>$row</span>=''<span>; </span><span>if</span>(<span>$type</span>==1<span>){ </span><span>$row</span>=<span>join</span>('',<span>range</span>(0, 9<span>)); }</span><span>else</span> <span>if</span>(<span>$type</span>==2<span>){ </span><span>$row</span>=<span>join</span>('', <span>array_merge</span>(<span>range</span>('a','z'),<span>range</span>('A', 'Z'<span>))); }</span><span>else</span> <span>if</span>(<span>$type</span>==3<span>){ </span><span>$row</span>=<span>join</span>('', <span>array_merge</span>(<span>range</span>('a','z'),<span>range</span>('A', 'Z'),<span>range</span>(0, 9<span>))); }; </span><span>$row</span>=<span>str_shuffle</span>(<span>$row</span><span>); </span><span>$row</span>=<span>substr</span>(<span>$row</span>,0,<span>$length</span><span>); </span><span>return</span> <span>$row</span><span>; } </span><span>/*</span><span>* * 生成缩略图 * @param int $type //包含数字或者英文 * @param int $length 多少个字符 * @param int $pixel 干扰小点的密度 * @param int $dst_h 干扰线的密度 * @param string //验证码在$_SESSION中的名字 </span><span>*/</span> <span>function</span> verifyImage(<span>$type</span>=1,<span>$length</span>=4,<span>$pixel</span>=0,<span>$line</span>=0,<span>$sess_name</span> = "verify"<span>){ </span><span>//</span><span>session_start(); //创建画布</span> <span>$width</span> = 100<span>; </span><span>$height</span> = 40<span>; </span><span>$image</span> = imagecreatetruecolor ( <span>$width</span>, <span>$height</span><span> ); </span><span>$white</span> = imagecolorallocate ( <span>$image</span>, 255, 255, 255<span> ); </span><span>$black</span> = imagecolorallocate ( <span>$image</span>, 0, 0, 0<span> ); </span><span>//</span><span>用填充矩形填充画布</span> imagefilledrectangle ( <span>$image</span>, 1, 1, <span>$width</span> - 2, <span>$height</span> - 2, <span>$white</span><span> ); </span><span>$chars</span> = buildRandomString ( <span>$type</span>, <span>$length</span><span> ); </span><span>$_SESSION</span> [<span>$sess_name</span>] = <span>$chars</span><span>; </span><span>//</span><span>$fontfiles = array ("MSYH.TTF", "MSYHBD.TTF", "SIMLI.TTF", "SIMSUN.TTC", "SIMYOU.TTF", "STZHONGS.TTF" );</span> <span>$fontfiles</span> = <span>array</span> ("SIMKAI.TTF"<span> ); </span><span>//</span><span>由于字体文件比较大,就只保留一个字体,如果有需要的同学可以自己添加字体,字体在你的电脑中的fonts文件夹里有,直接运行输入fonts就能看到相应字体</span> <span>for</span>(<span>$i</span> = 0; <span>$i</span> < <span>$length</span>; <span>$i</span> ++<span>) { </span><span>$size</span> = <span>mt_rand</span> ( 14, 18<span> ); </span><span>$angle</span> = <span>mt_rand</span> ( - 15, 15<span> ); </span><span>$x</span> = 5 + <span>$i</span> * <span>$size</span><span>; </span><span>$y</span> = <span>mt_rand</span> ( 20, 26<span> ); </span><span>$fontfile</span> = "../fonts/" . <span>$fontfiles</span> [<span>mt_rand</span> ( 0, <span>count</span> ( <span>$fontfiles</span> ) - 1<span> )]; </span><span>$color</span> = imagecolorallocate ( <span>$image</span>, <span>mt_rand</span> ( 50, 90 ), <span>mt_rand</span> ( 80, 200 ), <span>mt_rand</span> ( 90, 180<span> ) ); </span><span>$text</span> = <span>substr</span> ( <span>$chars</span>, <span>$i</span>, 1<span> ); imagettftext ( </span><span>$image</span>, <span>$size</span>, <span>$angle</span>, <span>$x</span>, <span>$y</span>, <span>$color</span>, <span>$fontfile</span>, <span>$text</span><span> ); } </span><span>if</span> (<span>$pixel</span><span>) { </span><span>for</span>(<span>$i</span> = 0; <span>$i</span> < 50; <span>$i</span> ++<span>) { imagesetpixel ( </span><span>$image</span>, <span>mt_rand</span> ( 0, <span>$width</span> - 1 ), <span>mt_rand</span> ( 0, <span>$height</span> - 1 ), <span>$black</span><span> ); } } </span><span>if</span> (<span>$line</span><span>) { </span><span>for</span>(<span>$i</span> = 1; <span>$i</span> < <span>$line</span>; <span>$i</span> ++<span>) { </span><span>$color</span> = imagecolorallocate ( <span>$image</span>, <span>mt_rand</span> ( 50, 90 ), <span>mt_rand</span> ( 80, 200 ), <span>mt_rand</span> ( 90, 180<span> ) ); imageline ( </span><span>$image</span>, <span>mt_rand</span> ( 0, <span>$width</span> - 1 ), <span>mt_rand</span> ( 0, <span>$height</span> - 1 ), <span>mt_rand</span> ( 0, <span>$width</span> - 1 ), <span>mt_rand</span> ( 0, <span>$height</span> - 1 ), <span>$color</span><span> ); } } </span><span>header</span> ( "content-type:image/gif"<span> ); imagegif ( </span><span>$image</span><span> ); imagedestroy ( </span><span>$image</span><span> ); }</span>
主要要点:1、如果前面没有申明session_start();则需要申明;2、字体可以在cmf输入fonts下载到自己定义的fonts文件夹;3、$_SESSION [$sess_name]可以通过$_POST获得用户输入的验证码进行比较。