/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<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<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<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++)>