`
netxdiy
  • 浏览: 677298 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

一个生成验证字符或数字的增强类(downmoon)(基于.net1.1)及调用示例

 
阅读更多
usingSystem;
usingSystem.Drawing;
usingSystem.Drawing.Imaging;
usingSystem.Web.UI;
usingSystem.Drawing.Drawing2D;
usingSystem.IO;
usingSystem.Text;
usingSystem.Collections.Specialized;
namespaceVegnet.Common.Framework.Util
...{
/**////<summary>
///生成验证码的类
///</summary>

调用示例#region调用示例
//**********************************************调用示例**************************************************
*作者downnmoon(邀月)2006年11月************************************************************************

//呈现页面后台
privatevoidgetNumbers(intlen)
...{
ValidateNumber.CurrentLength
=len;
ValidateNumberAndChar.CurrentNumber
=ValidateNumberAndChar.CreateValidateNumber(ValidateNumberAndChar.CurrentLength);
stringnumber=ValidateNumberAndChar.CurrentNumber;
ValidateNumberAndChar.CreateValidateGraphic(
this,number);
HttpCookiea
=newHttpCookie("VegnetValidNumber2",number);
Response.Cookies.Add(a);

}

//验证页面前台
<asp:TextBoxid="TextBox3"runat="server"></asp:TextBox>
<asp:Labelid="Label3"runat="server"></asp:Label>
<asp:Buttonid="Button3"runat="server"Text="验证"></asp:Button>
<IMGsrc="DispValid.aspx">
//验证页面后台
privatevoidButton3_Click(objectsender,System.EventArgse)
...{
HttpCookieCollectioncookies
=Request.Cookies;
stringtmp=cookies["VegnetValidNumber2"].Value;
this.Label3.Text=(tmp.Trim().ToLower()==TextBox3.Text.Trim().ToLower())?"正确":"无效";
}



******************************************************************************************************/

#endregion

publicclassValidateNumberAndChar
...{
publicValidateNumberAndChar()
...{
}

/**////<summary>
///验证码的最大长度
///</summary>

publicstaticintMaxLength
...{
get...{return10;}
}

/**////<summary>
///验证码的最小长度
///</summary>

publicstaticintMinLength
...{
get...{return1;}
}

/**////<summary>
///验证码的前缀
///</summary>

publicstaticstringBaseString
...{
get
...{
return"VegnetValidNumber";
}

}

/**////<summary>
///当前字符串长度,主要是为了更换图片时用
///</summary>

privatestaticint_currentLength=5;
publicstaticintCurrentLength
...{
get
...{
return_currentLength;
}

set
...{
_currentLength
=value;
}

}

/**////<summary>
///当前字符串,主要是为了更换图片时用
///</summary>

privatestaticstring_currentNumber="";
publicstaticstringCurrentNumber
...{
get
...{
if(_currentNumber!="")
...{
return_currentNumber;
}

else
...{
returnCreateValidateNumber(CurrentLength);
}

}

set
...{
_currentNumber
=value;
}

}

/**////<summary>
///合法字符列表
///</summary>

privatestaticstringstrLetters
...{
get
...{
return"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
}

}


/**////<summary>
///生成验证码
///</summary>
///<paramname="length">指定验证码的长度</param>
///<returns></returns>

publicstaticstringCreateValidateNumber(intlength)
...{
int[]randMembers=newint[length];
int[]validateNums=newint[length];
stringvalidateNumberStr="";
//生成起始序列值
intseekSeek=unchecked((int)DateTime.Now.Ticks);
RandomseekRand
=newRandom(seekSeek);
intbeginSeek=(int)seekRand.Next(0,Int32.MaxValue-length*10000);
int[]seeks=newint[length];
for(inti=0;i<length;i++)
...{
beginSeek
+=10000;
seeks[i]
=beginSeek;
}

//生成随机数字
for(inti=0;i<length;i++)
...{
Randomrand
=newRandom(seeks[i]);
intpownum=1*(int)Math.Pow(10,length);
randMembers[i]
=rand.Next(pownum,Int32.MaxValue);
}

//抽取随机数字
for(inti=0;i<length;i++)
...{
stringnumStr=randMembers[i].ToString();
intnumLength=numStr.Length;
Randomrand
=newRandom();
intnumPosition=rand.Next(0,numLength-1);
validateNums[i]
=Int32.Parse(numStr.Substring(numPosition,1));
}

//生成验证码
for(inti=0;i<length;i++)
...{
validateNumberStr
+=validateNums[i].ToString();
}

returnvalidateNumberStr;
}


/**////<summary>
///生成验证码(依据合法字符列表随机生成)
///</summary>
///<paramname="length"></param>
///<returns></returns>

publicstaticstringCreateValidateChar(intlength)
...{

StringBuilders
=newStringBuilder();
//生成起始序列值
intseekSeek=unchecked((int)DateTime.Now.Ticks);
RandomseekRand
=newRandom(seekSeek);
intbeginSeek=(int)seekRand.Next(0,Int32.MaxValue-length*10000);
int[]seeks=newint[length];
for(inti=0;i<length;i++)
...{
beginSeek
+=10000;
seeks[i]
=beginSeek;
}

//将随机生成的字符串绘制到图片上
for(inti=0;i<length;i++)
...{
Randomr
=newRandom(seeks[i]);
s.Append(strLetters.Substring(r.Next(
0,strLetters.Length-1),1));
}

returns.ToString();
}


/**////<summary>
///创建验证码的图片
///</summary>
///<paramname="containsPage">要输出到的page对象</param>
///<paramname="validateNum">验证码</param>

publicstaticvoidCreateValidateGraphic(PagecontainsPage,stringvalidateNum)
...{
Bitmapimage
=newBitmap((int)Math.Ceiling(validateNum.Length*15),25);
Graphicsg
=Graphics.FromImage(image);
try
...{
//生成随机生成器
Randomrandom=newRandom();
//清空图片背景色
g.Clear(Color.White);
//画图片的干扰线
for(inti=0;i<25;i++)
...{
intx1=random.Next(image.Width);
intx2=random.Next(image.Width);
inty1=random.Next(image.Height);
inty2=random.Next(image.Height);
g.DrawLine(
newPen(Color.GhostWhite),x1,y1,x2,y2);
}

Fontfont
=newFont("Arial",16,(FontStyle.Bold|FontStyle.Italic));
LinearGradientBrushbrush
=newLinearGradientBrush(newRectangle(0,0,image.Width,image.Height),
Color.Blue,Color.DarkRed,
1.2f,true);
g.DrawString(validateNum,font,brush,
3,2);
//画图片的前景干扰点
for(inti=0;i<100;i++)
...{
intx=random.Next(image.Width);
inty=random.Next(image.Height);
image.SetPixel(x,y,Color.FromArgb(random.Next()));
}

//画图片的边框线
g.DrawRectangle(newPen(Color.Silver),0,0,image.Width-1,image.Height-1);
//保存图片数据
MemoryStreamstream=newMemoryStream();
image.Save(stream,ImageFormat.Jpeg);
//输出图片
containsPage.Response.Clear();
containsPage.Response.ContentType
="image/jpeg";
containsPage.Response.BinaryWrite(stream.ToArray());
}

finally
...{
g.Dispose();
image.Dispose();
}

}

/**////<summary>
///得到验证码图片的长度
///</summary>
///<paramname="validateNumLength">验证码的长度</param>
///<returns></returns>

publicstaticintGetImageWidth(intvalidateNumLength)
...{
return(int)(validateNumLength*15);
}

/**////<summary>
///得到验证码的高度
///</summary>
///<returns></returns>

publicstaticdoubleGetImageHeight()
...{
return25;
}

生成不重复的字条串#region生成不重复的字条串
privatestringRandomKey(intb,inte)
...{

returnDateTime.Now.ToString("yyyyMMdd-HHmmss-fff-")+this.getRandomID(b,e);

}


privateintgetRandomID(intminValue,intmaxValue)
...{
Randomri
=newRandom(unchecked((int)DateTime.Now.Ticks));
intk=ri.Next(minValue,maxValue);
returnk;
}

privatestringGuidString
...{
get
...{
returnGuid.NewGuid().ToString();
}

}


#endregion

}

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics