php中如何实现验证码

介绍

这篇文章主要介绍php中如何实现验证码,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!


<强> 1,字体变型(一般通过算法,进行扭曲,比较有代表性就是:http://code.google.com/p/cool-php-captcha/

 php中如何实现验证码

<强> 2,字体黏贴(这里面以qq验证码为代表了,目前网上还是很难找的到,破解qq验证码的)

 php中如何实现验证码

<强> 3,干扰线,噪点(这种识别起来相当容易,很容易被程序自动化识别)
对于上面提到,第1、2二种方法,在识别时候,是比较困难的。个人比较喜欢第二种方法,感觉看起来不是很费力。而扭曲的文字,总觉得怪怪的。哈哈,纯粹个人喜好了。
<强>实现代码:

代码如下:


& lt; ? php
/* *
, *带文字旋转,倾斜,黏贴,加正弦干扰线验证码*
, * @version 0.1
, * @author http://www.cnblogs.com/chengmo
, * @copyright程默QQ: 8292669
, */
类Utils_Caption
{
, var Width 美元;,,,,=60;,,,,,,,,,,//图片宽
, var Height 美元;,,,=30,,,,,,,,,,,//图片高
, var Length 美元;,,,=4,,,,,,,,,,,,//验证码位数
, var BgColor 美元;,,=? FFFFFF",,,,//背景色
, var数组$ TFonts=(“font.ttf");
, var TFontSize美元=数组(17日20);//字体大小范围
, var TFontAngle美元=数组(-20年,20);//旋转角度
, var Chars 美元,=?123456789“,,,,,,,,,//验证码范围(字母数字)
, var Code 美元;,,=()数组;,,,,,,,,,,,,,//验证码
, var Image 美元,=?,,,,,,,,,,,,,//图形对象
, var数组$ FontColors=(& # 39; # f36161& # 39;, & # 39; # 6 bc146& # 39;, & # 39; # 5368 bd # 39;),,//字体颜色,红绿蓝
, var TPadden=0.75美元;///字符间距、多少个字符
, var Txbase=5美元;///x轴两边距离
, var Tybase=5美元;///y轴两边距离
, var TLine美元=true;///画干扰线
, public RandRSI()函数///生成验证码
, {
,, $ this→TFontAngle=范围($ this→TFontAngle[0],美元这→TFontAngle [1]);
,, $ this→TFontSize=范围($ this→TFontSize[0],美元这→TFontSize [1]);
,, $ arr=数组();
,,识字课=这→美元识字课;
,, TFontAngle=这→美元TFontAngle;
,, TFontSize=这→美元TFontSize;
,, FontColors=这→美元FontColors;
,,代码=懊涝?
,, $字体=目录名(__FILE__)干净/字体“。$ this→TFonts [0],
,, charlen=strlen($字符)1美元;
,, anglelen=count ($ TFontAngle) 1美元;//角度范围
,, fontsizelen=count ($ TFontSize) 1美元;//角度范围
,, fontcolorlen=count ($ FontColors) 1美元;//角度范围
,,, (i=0; i<美元;这美元→长度;美元我+ +)///得到字符与颜色
,, {
,,, char美元=$字符[兰德(0,charlen美元)];///得到字符
,,,角=TFontAngle美元[兰德(0,anglelen美元)];///旋转角度
,,,字形大?TFontSize美元[兰德(0,fontsizelen美元)];///字体大小
,,, fontcolor=FontColors美元[兰德(0,fontcolorlen美元)];///字体大小
,,,=绑定这个→美元_calculateTextBox(字形大小,角度,美元$字体,$字符);///得到范围
,,, $ arr[]=数组(字形大小,角度,美元fontcolor美元,美元char、字体、美元绑定美元),,///得到矩形框
,,,代码。美元=$字符;
,,}
,, $ this→代码=美元arr;//验证码
,,返回代码;美元
,}
,公共函数画()///画图
, {
,,如果(空($ this→代码))$ this→RandRSI ();
,,代码=这→美元代码;///用户验证码
,, wh=这→美元_getImageWH($代码);
,,宽度=wh[0]美元;
,,身高=wh美元[1];///高度
,, $ this→宽度=$宽度;
,, $ this→高度=$高度;
,, $ this→图片=imageCreate(宽度、高度美元);
,,形象=这→美元形象;
,,回来=这→美元_getColor2 ($ this→_getColor ($ this→背景));///背景颜色
,, imageFilledRectangle($形象,0,0,宽度,高度,美元美元);///填充背景
,, TPadden=这→美元TPadden;
,, basex=这→美元Txbase;
,,颜色美元=零;
,, foreach(代码为v)美元///逐个画字符
,, {
,,,绑定=v美元[5],
,,,颜色=这→美元_getColor2 ($ this→_getColor (v[2])美元);
,,, imagettftext(形象、v[0],美元美元v [1], basex美元,美元绑定[& # 39;高度# 39;],美元的颜色,v[4],美元美元v [3]),
,,, basex=$ basex +绑定美元[& # 39;宽度# 39;]* TPadden -绑定美元[& # 39;左# 39;];///计算下一个左边距
,,}
,, $ this→TLine ? $ this→_wirteSinLine(颜色、basex美元):空;null

php中如何实现验证码