asp.net验证码生成类(参考)

/Created by Chen****

*如果你觉得本人的文章好,要引用请尊重著作人的劳动果实,说明

*出处以及原创作者,Thank you!!! email:aishen944-sohu.com

*******************************************************************/
using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Web.UI;
using System.Drawing.Drawing2D;
using System.IO;
namespace Validate
{
///

1<summary>   
2/// 生成验证码的类   
3/// </summary>

public class ValidateNumber
{
public ValidateNumber()
{
}
///

1<summary>   
2/// 验证码的最大长度   
3/// </summary>

public int MaxLength
{
get{return 10;}
}
///

1<summary>   
2/// 验证码的最小长度   
3/// </summary>

public int MinLength
{
get{return 1;}
}
///

1<summary>   
2/// 生成验证码   
3/// </summary>

///

1<param name="length"/>

指定验证码的长度
///

1<returns></returns>

public string CreateValidateNumber(int length)
{
int[] randMembers=new int[length];
int[] validateNums=new int[length];
string validateNumberStr="";
//生成起始序列值
int seekSeek=unchecked((int)DateTime.Now.Ticks);
Random seekRand=new Random(seekSeek);
int beginSeek=(int)seekRand.Next(0,Int32.MaxValue-length*10000);
int[] seeks=new int[length];
for(int i=0;i

 1<length;i++) <summary="" beginseek+="10000;" for(int="" i="0;i&lt;length;i++)" int="" numlength="numStr.Length;" numposition="rand.Next(0,numLength-1);" numstr="randMembers[i].ToString();" pownum="1*(int)Math.Pow(10,length);" rand="new" randmembers[i]="rand.Next(pownum,Int32.MaxValue);" random="" random();="" random(seeks[i]);="" return="" seeks[i]="beginSeek;" string="" validatenumberstr+="validateNums[i].ToString();" validatenumberstr;="" validatenums[i]="Int32.Parse(numStr.Substring(numPosition,1));" {="" }="" 抽取随机数字="" 生成随机数字="" 生成验证码="">   
 2/// 创建验证码的图片   
 3///    
 4/// <param name="containsPage"/>要输出到的page对象   
 5/// <param name="validateNum"/>验证码   
 6public void CreateValidateGraphic(Page containsPage,string validateNum)   
 7{   
 8Bitmap image=new Bitmap((int)Math.Ceiling(validateNum.Length*12.5),22);   
 9Graphics g=Graphics.FromImage(image);   
10try   
11{   
12//生成随机生成器   
13Random random=new Random();   
14//清空图片背景色   
15g.Clear(Color.White);   
16//画图片的干扰线   
17for(int i=0;i&lt;25;i++)   
18{   
19int x1=random.Next(image.Width);   
20int x2=random.Next(image.Width);   
21int y1=random.Next(image.Height);   
22int y2=random.Next(image.Height);   
23g.DrawLine(new Pen(Color.Silver),x1,y1,x2,y2);   
24}   
25Font font=new Font("Arial",12,(FontStyle.Bold|FontStyle.Italic));   
26LinearGradientBrush brush=new LinearGradientBrush(new Rectangle(0,0,image.Width,image.Height),   
27Color.Blue,Color.DarkRed,1.2f,true);   
28g.DrawString(validateNum,font,brush,3,2);   
29//画图片的前景干扰点   
30for(int i=0;i&lt;100;i++)   
31{   
32int x=random.Next(image.Width);   
33int y=random.Next(image.Height);   
34image.SetPixel(x,y,Color.FromArgb(random.Next()));   
35}   
36//画图片的边框线   
37g.DrawRectangle(new Pen(Color.Silver),0,0,image.Width-1,image.Height-1);   
38//保存图片数据   
39MemoryStream stream=new MemoryStream();   
40image.Save(stream,ImageFormat.Jpeg);   
41//输出图片   
42containsPage.Response.Clear();   
43containsPage.Response.ContentType="image/jpeg";   
44containsPage.Response.BinaryWrite(stream.ToArray());   
45}   
46finally   
47{   
48g.Dispose();   
49image.Dispose();   
50}   
51}   
52/// <summary>   
53/// 得到验证码图片的长度   
54/// </summary>   
55/// <param name="validateNumLength"/>验证码的长度   
56/// <returns></returns>   
57public static int GetImageWidth(int validateNumLength)   
58{   
59return (int)(validateNumLength*12.5);   
60}   
61/// <summary>   
62/// 得到验证码的高度   
63/// </summary>   
64/// <returns></returns>   
65public static double GetImageHeight()   
66{   
67return 22.5;   
68}   
69}   
70}</length;i++)>
Published At
Categories with Web编程
Tagged with
comments powered by Disqus