随机生成验证码
1
using System;2
using System.Data;3
using System.Configuration;4
using System.Collections;5
using System.Web;6
using System.Web.Security;7
using System.Web.UI;8
using System.Web.UI.WebControls;9
using System.Web.UI.WebControls.WebParts;10
using System.Web.UI.HtmlControls;11
using System.Drawing;12

13
public class CreateImage14


{15
public void DrawImage()16

{17
CreateImage img = new CreateImage();18
HttpContext.Current.Session["CheckCode"] = img.RndNum(4);19
img.CreateImages(HttpContext.Current.Session["CheckCode"].ToString());20
}21

22

/**//// <summary>23
/// 生成验证图片24
/// </summary>25
/// <param name="checkCode">验证字符</param>26
private void CreateImages(string checkCode)27

{28
int iwidth = (int)(checkCode.Length * 13);29
System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth+2, 25);30
Graphics g = Graphics.FromImage(image);31
g.Clear(Color.White);32
//定义颜色33

Color[] c =
{ Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };34
//定义字体 35

string[] font =
{ "宋体", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "Verdana" };36
Random rand = new Random();37
//随机输出噪点38
for (int i = 0; i <25; i++)39

{40
int x = rand.Next(image.Width);41
int y = rand.Next(image.Height);42
g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1);43
}44

45
//输出不同字体和颜色的验证码字符46
for (int i = 0; i < checkCode.Length; i++)47

{48
int cindex = rand.Next(7);49
int findex = rand.Next(5);50

51
Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);52
Brush b = new System.Drawing.SolidBrush(c[cindex]);53
int ii = 4;54
if ((i + 1) % 2 == 0)55

{56
ii = 2;57
}58
g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);59
}60
//画一个边框61
g.DrawRectangle(new Pen(Color.Green, 0), 0, 0, image.Width-1 , image.Height-1);62

63
//输出到浏览器64
System.IO.MemoryStream ms = new System.IO.MemoryStream();65
image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);66
HttpContext.Current.Response.ClearContent();67
//Response.ClearContent();68
HttpContext.Current.Response.ContentType = "image/Jpeg";69
HttpContext.Current.Response.BinaryWrite(ms.ToArray());70
g.Dispose();71
image.Dispose();72
}73

74

/**//// <summary>75
/// 生成随机的字母76
/// </summary>77
/// <param name="VcodeNum">生成字母的个数</param>78
/// <returns>string</returns>79
private string RndNum(int VcodeNum)80

{81
//string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z";82
string Vchar = "0,1,2,3,4,5,6,7,8,9";83

84
string[] VcArray = Vchar.Split(',');85
string VNum = ""; //由于字符串很短,就不用StringBuilder了86
int temp = -1; //记录上次随机数值,尽量避免生产几个一样的随机数87

88
//采用一个简单的算法以保证生成随机数的不同89
Random rand = new Random();90
for (int i = 1; i < VcodeNum + 1; i++)91

{92
if (temp != -1)93

{94
rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));95
}96
int t = rand.Next(VcArray.Length);97
if (temp != -1 && temp == t)98

{99
return RndNum(VcodeNum);100
}101
temp = t;102
VNum += VcArray[t];103
}104
return VNum;105
}106
}

浙公网安备 33010602011771号