`
- 浏览:
677298 次
- 性别:
- 来自:
上海
-
一个生成验证字符或数字的增强类(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
相关推荐
asp.net中获取远程网页的内容之一(downmoon原创)
asp.net下获取远程网页的内容之二(downmoon原创)
一个相当独立的.通用分页控件c#源码(downmoon收集) 采用工厂模式,提供标准化接口!支持 DataGrid 及 Repeater分页使用方法:新建两个解决方案 一为Pager,一为webtest 下载后请将两个解决方案合并一下,即新的...
讲座内容: Profie 是ASP.NET 2.0的重要特性之一,而ASP.NET AJAX提出了Profile Service,使开发人员能够方便地在客户端以AJAX的方式来处理Profile信息。这节课我们将来了解这个ProfileService简单的功能细节以及...
W3C提供免费的Markup Validation Service,这是一个可以...这是一个基于该服务的C#版本的API类库演示程序。 详细请看这里: http://blog.csdn.net/downmoon/archive/2010/10/17/5946465.aspx 欢迎联系邀月 3w@live.cn
前段时间需要作一个的Web前端应用,需要用多个框架,一个典型的应用场景是省市三级联动,基于此应用,特将三种主要的ajax框架略作整理,方便有需要的朋友查阅。 在示例之前,我们先设置一个演示数据源,新建一个项目...
上周完成了一个报表小项目,使用开源组件NPOI作为主要组件。之所以采用第三方的开源组件而不使用COM或微软提供的API,原因就不多说...在此分享NPOI的一个应用,利用Excel模板生成excel文件。这正是NPOI强于Myxls之处。
讲座内容: Authentication Service是ASP.NET AJAX提供的另一个Application Service,能够让我们以AJAX方式来使用用户登录等功能。本次课程主要讲述如何来使用Authentication Service。
讲座内容: Profie是ASP.NET 2.0的重要特性之一,而ASP.NET AJAX提出了Profile Service,使开发人员能够方便地在客户端以AJAX的方式来处理Profile信息。这节课我们将来了解这个ProfileService的使用和扩展方式。
讲座内容: 利用面向对象类型系统是扩展组件的常用方法,但是我们在客户端进行开发的时候也不能忘记正在使用的是JavaScript这个非常灵活的动态语言,使用一些特殊的方式来扩展组件有时候会得到更好的效果。...
Authentication Service是ASP.NET AJAX提供的另一个Application Service,能够让我们以AJAX方式来使用用户登录等功能。本次课程主要讲述Authentication Service的简单实现细节以及如何扩展Authentication Service。
在IE中调用javascript打开Excel的代码(downmoon原作)
讲座内容: Microsoft AJAX Library为了便于开发AJAX应用提出了一个异步通信层,它是整个ASP.NET AJAX客户端AJAX请求的基础。事实上,我们能够基于这个通信平台进行轻松的扩展,使它能够支持不同的通信方式。这节...
讲座内容: Microsoft AJAX Library为了便于开发AJAX应用提出了一个异步通信层。使用这个异步通信层可以方便地发出AJAX请求,而且事实上,整个ASP.NET AJAX的客户端与服务器端的通信都是由它负责的。我们这节课将...
基于vs2010的省市三级联动的DropDownList+Ajax的三种框架(aspnet/Jquery/ExtJs) 示例源代码。
Jquery.Validate是一个相当棒的客户端验证控件,它的功能强大就不必说了,本文主要介绍了它对asp.net中三类控件CheckBoxList,RadioButtonList,DropDownList是否选中的验证
获取远程网页的内容之一(downmoon原创)