其实,生成验证码比较简单,画图也不难,不过大家都不喜欢读手册,也不喜欢自己动手,一般是网上抄一段代码了事,我一直如此,偶尔画图,其实发现画图挺有趣。
不过拿普通字体生成的验证码,是没有太大的“战斗力”的,很轻易的就会验证码识别程序识别内容,然后轻易被灌水,要生成好的验证码图片不是简单的事情,有些大公司专门一个部门去做这么一件事情,不过我这里只是了解演示,一般用途应该就够用了吧,呵呵。
下面两个函数,一个能够画出中文内容,另外一个能够画出英文内容,按照需要使用。
- /**
- * 生成中文字符,
- *
- * 必须有GD库、iconv或者mbstring库、相应的字体文件
- */
- function makeChineseCharPic($str = '中文字符'){
- //转码
- if (function_exists('iconv')){
- $str = iconv('gbk', 'utf-8', $str);
- }elseif (function_exists('mb_convert_encoding')){
- $str = mb_convert_encoding($str, 'utf-8', 'gbk');
- }else{
- exit("Not iconv charset");
- }
- //产生图片
- $im = imageCreate(80, 30);
- //背景色
- $bkg = imageColorAllocate($im, 0, 255, 255);
- //字体色
- $clr = imageColorAllocate($im, 0, 128, 255);
- //字体文件路径
- $font = "c:/windows/fonts/simhei.ttf";
- //使用字体来画TTF内容
- imageTTFText($im, 13, 0, 5, 20, $clr, $font, $str);
- //--------------------------------------------------
- // 黑体:simhei.ttf, 宋体:simsun.ttc, 隶书:simli.ttf, 楷体:simkai.ttf, 幼圆:simyou.ttf
- // 华文行楷:stxingka.ttf, 华文新魏:stxinwei.ttf, 华文彩云:stcaiyun.ttf, 华文仿宋:stfangso.ttf
- // 方正姚体:fzytk, 方正舒体:fzstk.ttf
- //--------------------------------------------------
- //输出后清除资源
- header("Content-type: image/png");
- imagePng($im);
- imageDestroy($im);
- }
- /**
- * 画英文字符 (必须有GB库)
- */
- function makeEnglishCharPic($str = 'ABCD12'){
- //生成图片
- $im = imageCreateTrueColor(65, 20);
- //背景色
- $bg = imageColorAlLocate($im, 0, 0, 0);
- //字体色
- $textColor = imageColorAlLocate($im, 0, 255, 255);
- //画图
- imageString($im, 5, 5, 2, $str, $textColor);
- //输出后清除资源
- header("Content-type: image/jpeg");
- imageJpeg($im);
- imageDestroy($im);
- }
当然,我们可以加入一些干扰因子,或者是对图片进行变形,让那些图片识别程序无法识