温馨提示:代码在线浏览功能只能做为源码浏览参考,如果想更进一步了解该代码请下载:内文广告管理系统V1.1版源码
当前文件:
TextAd/App_Code/ValidateCode.cs,打开代码结构图
TextAd/App_Code/ValidateCode.cs,打开代码结构图1using System.Text; 2
using System; 3
using System.Web; 4
using System.IO; 5
using System.Drawing; 6
using System.Drawing.Imaging; 7
8
//该源码下载自 www.51aspx.com(51aspx.com) 9
10
// 生成验证码图片 11
public class ValidateCode 12
{ 13
// 该方法用于生成指定位数的随机数 14
//VcodeNum:是随机数的位数;返回一个随机数字符串 15
private string RndNum(int VcodeNum) 16
{ 17
//验证码可以显示的字符集合 18
string Vchar = "1,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,p" + 19
",q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,P,Q" + 20
",R,S,T,U,V,W,X,Y,Z"; 21
string[] VcArray = Vchar.Split(new Char[] { ',' });//拆分成数组 22
string VNum = "";//产生的随机数 23
int temp = -1;//记录上次随机数值,尽量避避免生产几个一样的随机数 24
Random rand = new Random(); 25
//采用一个简单的算法以保证生成随机数的不同 26
for (int i = 1; i < VcodeNum + 1; i++) 27
{ 28
if (temp != -1) 29
{ 30
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));//初始化随机类 31
} 32
int t = rand.Next(61);//获取随机数 33
if (temp != -1 && temp == t) 34
{ 35
return RndNum(VcodeNum);//如果获取的随机数重复,则递归调用 36
} 37
temp = t;//把本次产生的随机数记录起来 38
VNum += VcArray[t];//随机数的位数加一 39
} 40
return VNum; 41
} 42
// 该方法是将生成的随机数写入图像文件 43
//VNum是一个随机数 44
public MemoryStream Create(out string VNum) 45
{ 46
VNum = RndNum(4); 47
Bitmap Img = null; 48
Graphics g = null; 49
MemoryStream ms = null; 50
System.Random random = new Random(); 51
//验证码颜色集合 52
Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; 53
//验证码字体集合 54
string[] fonts ={ "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" }; 55
//定义图像的大小,生成图像的实例 56
Img = new Bitmap((int)VNum.Length * 18, 32); 57
g = Graphics.FromImage(Img);//从Img对象生成新的Graphics对象 58
g.Clear(Color.White);//背景设为白色 59
//在随机位置画背景点 60
for (int i = 0; i < 100; i++) 61
{ 62
int x = random.Next(Img.Width); 63
int y = random.Next(Img.Height); 64
g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1); 65
} 66
//验证码绘制在g中 67
for (int i = 0; i < VNum.Length; i++) 68
{ 69
int cindex = random.Next(7);//随机颜色索引值 70
int findex = random.Next(5);//随机字体索引值 71
Font f = new System.Drawing.Font(fonts[findex], 13, System.Drawing.FontStyle.Bold);//字体 72
Brush b = new System.Drawing.SolidBrush(c[cindex]);//颜色 73
int ii = 4; 74
if ((i + 1) % 2 == 0)//控制验证码不在同一高度 75
{ 76
ii = 2; 77
} 78
g.DrawString(VNum.Substring(i, 1), f, b, 3 + (i * 12), ii);//绘制一个验证字符 79
} 80
ms = new MemoryStream();//生成内存流对象 81
Img.Save(ms, ImageFormat.Jpeg);//将此图像以Png图像文件的格式保存到流中 82
//回收资源 83
g.Dispose(); 84
Img.Dispose(); 85
return ms; 86
} 87
} 88
89






}