protected void Page_Load(object sender, EventArgs e) { string checkCode = CreateRandomCode(4); Session["CheckCode"] = checkCode; CreateImage(checkCode); } private string CreateRandomCode(int codeCount) { string allChar = "1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,U,W,X,Y,Z"; string[] allCharArray = allChar.Split(','); string randomCode = ""; int temp = -1; Random rand = new Random(); for (int i = 0; i < codeCount; i++) { if (temp != -1) { rand = new Random(i * temp * ((int)DateTime.Now.Ticks)); } int t = rand.Next(allCharArray.Length-1); if (temp == t) { return CreateRandomCode(codeCount); } temp = t; randomCode += allCharArray[t]+" "; } return randomCode; } private void CreateImage(string checkCode) { //int iwidth = (int)(checkCode.Length * 11.5); System.Drawing.Bitmap image = new System.Drawing.Bitmap(80, 25); Graphics g = Graphics.FromImage(image); //Font f = new System.Drawing.Font("VerDana", 13, GetRndPoint().X % 2 == 1 ? System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic : System.Drawing.FontStyle.Bold); Font f = new System.Drawing.Font("VerDana", 13, GetRndColor(0, 100) % 2 == 1 ? System.Drawing.FontStyle.Regular | System.Drawing.FontStyle.Italic : System.Drawing.FontStyle.Regular); Brush b = new System.Drawing.SolidBrush(Color.Black); g.Clear(Color.White ); string[] allCharArray = checkCode.Split(' '); Color color =new Color (); for (int i = 0; i < 4; i++) {// 4个字符 随机颜色 显示 斜体|正常 color = Color.FromArgb(GetRndColor(0, 170), GetRndColor(0, 170), GetRndColor(0, 170)); f = new System.Drawing.Font("VerDana", 14, GetRndColor(0, 255) % 2 == 0 ? System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic : System.Drawing.FontStyle.Bold); b = new System.Drawing.SolidBrush(color); g.DrawString(allCharArray[i], f, b, i * 20 + GetRndColor(-2, 3), 0);//写字符 字符间距随机为(-5,5) Point _p1=GetRndPoint(80,25); Point _p2 = new Point(_p1.X+ 2, _p1.Y + 2); g.DrawLine(new Pen(color , 2), _p1, _p2); _p1=GetRndPoint(80,25); _p2 = new Point(_p1.X+ 2, _p1.Y + 2); g.DrawLine(new Pen(color , 2), _p1, _p2); _p1=GetRndPoint(80,25); _p2 = new Point(_p1.X+ 2, _p1.Y + 2); g.DrawLine(new Pen(color , 2), _p1, _p2); } g.DrawBezier(new Pen(color, 2), new Point(0, GetRndColor(0, 25)), GetRndPoint(85, 30), GetRndPoint(85, 30), new Point(80, GetRndColor(0, 25)));//画曲线 g.DrawRectangle(new Pen(Color.Black, 1), 0, 0, 79, 24);//画外边框 System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); Response.ClearContent(); Response.ContentType = "image/Jpeg"; Response.BinaryWrite(ms.ToArray()); g.Dispose(); image.Dispose(); } /// <summary> /// 获取随机坐标 /// </summary> /// <returns></returns> private Point GetRndPoint(int maxX,int maxY) { Point ret = new Point(0, 0); ret.X = new Random().Next(maxX); System.Threading.Thread.Sleep(2); ret.Y = new Random().Next(maxY); return ret; } private int GetRndColor(int min ,int max) { System.Threading.Thread.Sleep(2); return new Random().Next(min, max); }