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
}
}
本文介绍了一种基于ASP.NET的验证码生成与验证方法,包括验证码的生成、图形展示及前后端验证过程。提供了完整的示例代码,展示了如何通过随机数和字符生成验证码,并将其显示为图形供用户验证。
1442

被折叠的 条评论
为什么被折叠?



