我的。随机使用不同的字体,并且随机transform,还有加了噪点 using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Drawing; using System.Drawing.Drawing2D; using System.Drawing.Imaging; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;using System.IO;namespace Shop { /// <summary> /// Summary description for ValidateCode. /// </summary> public class ValidateCode : System.Web.UI.Page { /// <summary> /// Validation Code generated fromt these charaters. /// Note: l,L 1(number), o, O, 0(number) are removed /// </summary> private const string strValidateCodeBound = "abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789"; private static string[] Fonts = new string[] { "Helvetica", "Geneva", "sans-serif", "Verdana", "Times New Roman", "Courier New", "Arial" }; #region Web Form Designer generated code override protected void OnInit(EventArgs e) { // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // InitializeComponent(); base.OnInit(e); }
/// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.Load += new System.EventHandler(this.Page_Load); } #endregion /// <summary> /// event handler of page load /// </summary> private void Page_Load(object sender, System.EventArgs e) { if(!IsPostBack) { string str_ValidateCode = GetRandomString(6); Session["ValidateCode"] = str_ValidateCode; CreateImage(str_ValidateCode); } } /// <summary> /// Generate random string /// </summary> private string GetRandomString(int int_NumberLength) { string valString = string.Empty; Random theRandomNumber = new Random((int)DateTime.Now.Ticks); for (int int_index = 0; int_index < int_NumberLength; int_index++) valString += strValidateCodeBound[theRandomNumber.Next(strValidateCodeBound.Length - 1)].ToString(); return valString; } /// <summary> /// Generate random Color /// </summary> private Color GetRandomColor() { Random RandomNum_First = new Random((int)DateTime.Now.Ticks);
System.Threading.Thread.Sleep(RandomNum_First.Next(50)); Random RandomNum_Sencond = new Random((int)DateTime.Now.Ticks); int int_Red = RandomNum_First.Next(256); int int_Green = RandomNum_Sencond.Next(256); int int_Blue = (int_Red + int_Green > 400) ? 0 : 400 - int_Red - int_Green; int_Blue = (int_Blue > 255) ? 255 : int_Blue; return Color.FromArgb(int_Red, int_Green, int_Blue); }
/// <summary> /// Create Validation Code Image /// </summary> private void CreateImage(string str_ValidateCode) { int int_ImageWidth = str_ValidateCode.Length * 22; Random newRandom = new Random(); Bitmap theBitmap = new Bitmap(int_ImageWidth + 6 , 38); Graphics theGraphics = Graphics.FromImage(theBitmap); theGraphics.Clear(Color.White); drawLine(theGraphics, theBitmap, newRandom); theGraphics.DrawRectangle(new Pen(Color.LightGray, 1), 0, 0, theBitmap.Width - 1, theBitmap.Height -1 ); for (int int_index = 0; int_index < str_ValidateCode.Length; int_index++) { Matrix X = new Matrix(); X.Shear((float)newRandom.Next(0,300)/1000 - 0.25f, (float)newRandom.Next(0,100)/1000 - 0.05f); theGraphics.Transform = X; string str_char = str_ValidateCode.Substring(int_index, 1); System.Drawing.Drawing2D.LinearGradientBrush newBrush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, theBitmap.Width, theBitmap.Height), Color.Blue, Color.DarkRed, 1.2f, true); Point thePos = new Point(int_index * 21 + 1 + newRandom.Next(3), 1 + newRandom.Next(13)); Font theFont = new Font(Fonts[newRandom.Next(Fonts.Length -1)], newRandom.Next(14,18), FontStyle.Bold); theGraphics.DrawString(str_char, theFont, newBrush, thePos); } drawPoint(theBitmap, newRandom); MemoryStream ms = new MemoryStream(); theBitmap.Save(ms, ImageFormat.Png); Response.ClearContent(); Response.ContentType = "image/Png"; Response.BinaryWrite(ms.ToArray()); theGraphics.Dispose(); theBitmap.Dispose(); Response.End(); } /// <summary> /// Draw Line for noise /// </summary> private void drawLine(Graphics gfc,Bitmap img, Random ran) { for (int i = 0; i < 10; i++) { int x1 = ran.Next(img.Width); int y1 = ran.Next(img.Height); int x2 = ran.Next(img.Width); int y2 = ran.Next(img.Height); gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } } /// <summary> /// Draw Point for noise /// </summary> private void drawPoint(Bitmap img, Random ran) { for (int i = 0; i < 30; i++) { int x = ran.Next(img.Width); int y = ran.Next(img.Height); img.SetPixel(x,y,Color.FromArgb(ran.Next())); } } } }
Random random = new Random(); Bitmap
public class VerificationCode : IHttpHandler { public void ProcessRequest(HttpContext context) { //生成随机的字符串 string randomString = GetRandomString(4); //将生成的字符串保存到数据库中 BoBoContext.Current.Session["Verification_Code"] = randomString; //生成验证码图片 GenerateVerificationCodeImage(randomString, context); } public bool IsReusable { get { return false; } } /// <summary> /// 得到随机字符串,长度自己定义 /// </summary> /// <param name="len">长度</param> /// <returns>指定长度的随机字符串</returns> private string GetRandomString(int len) { int num; int tem; Random random = new Random(); string rtuStr = ""; for (int i = 0; i < len; i++) { num = random.Next(); /* * 这里可以选择生成字符和数字组合的验证码 */ tem = num % 10 + '0';//生成数字 //tem = num % 26 + 'A';//生成字符 rtuStr += Convert.ToChar(tem).ToString(); } return rtuStr; } /// <summary> /// 生成验证码图片 /// </summary> /// <param name="randomString">随机字符串</param> /// <param name="context">Http上下文</param> private void GenerateVerificationCodeImage(string randomString, HttpContext context) { //string str = "OO00"; //前两个为字母O,后两个为数字0 int width = Convert.ToInt32(randomString.Length * 12); //计算图像宽度 Bitmap img = new Bitmap(width, 23); Graphics gfc = Graphics.FromImage(img); //产生Graphics对象,进行画图 gfc.Clear(Color.White); DrawLine(gfc, img); //写验证码,需要定义Font Font font = new Font("arial", 12, FontStyle.Bold); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.DarkOrchid, Color.Blue, 1.5f, true); gfc.DrawString(randomString, font, brush, 3, 2); DrawPoint(img); gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1); //将图像添加到页面 MemoryStream ms = new MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); //更改Http头 context.Response.ClearContent(); context.Response.ContentType = "image/gif"; context.Response.BinaryWrite(ms.ToArray()); //Dispose gfc.Dispose(); img.Dispose(); context.Response.End(); } /// <summary> /// 为生成的验证码图片增加线条 /// </summary> /// <param name="gfc">Graphics</param> /// <param name="img">初步生成的验证码图片</param> private void DrawLine(Graphics gfc, Bitmap img) { Random random = new Random(); //选择画10条线,也可以增加,也可以不要线,只要随机杂点即可 for (int i = 0; i < 10; i++) { int x1 = random.Next(img.Width); int y1 = random.Next(img.Height); int x2 = random.Next(img.Width); int y2 = random.Next(img.Height); gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); //注意画笔一定要浅颜色,否则验证码看不清楚 } } /// <summary> /// 为生成的验证码增加点 /// </summary> /// <param name="img">初步生成的验证码图片</param> private void DrawPoint(Bitmap img) { //选择画100个点,可以根据实际情况改变 Random random = new Random(); for (int i = 0; i < 100; i++) { int x = random.Next(img.Width); int y = random.Next(img.Height); img.SetPixel(x, y, Color.FromArgb(random.Next()));//杂点颜色随机 } int col = random.Next();//在一次的图片中杂店颜色相同 for (int i = 0; i < 100; i++) { int x = random.Next(img.Width); int y = random.Next(img.Height); img.SetPixel(x, y, Color.FromArgb(col)); } } } }
using System; using System.IO; using System.Web; using System.Drawing; namespace Kissogram.Common.Security { //GIF验证码类 public class Validate { //设置最少4位验证码 private byte TrueValidateCodeCount = 4; public byte ValidateCodeCount { get { return TrueValidateCodeCount; } set { //验证码至少为3位 if (value > 4) TrueValidateCodeCount = value; } } protected string ValidateCode = ""; //是否消除锯齿 public bool FontTextRenderingHint = false; //验证码字体 public string ValidateCodeFont = "Arial"; //验证码型号(像素) public float ValidateCodeSize = 13; public int ImageHeight = 23; //定义验证码中所有的字符 public string AllChar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"; //获得随机四位数 private void CreateValidate() { ValidateCode = ""; //将验证码中所有的字符保存在一个字符串数组中 string[] CharArray = AllChar.Split(','); int Temp = -1; //生成一个随机对象 Random RandCode = new Random(); //根据验证码的位数循环 for (int i = 0; i < ValidateCodeCount; i++) { //主要是防止生成相同的验证码 if (Temp != -1) { //加入时间的刻度 RandCode = new Random(i * Temp * ((int)DateTime.Now.Ticks)); } int t = RandCode.Next(35); if (Temp == t) { //相等的话重新生成 CreateValidate(); } Temp = t; ValidateCode += CharArray[Temp]; } //错误检测,去除超过指定位数的验证码 if (ValidateCode.Length > TrueValidateCodeCount) ValidateCode = ValidateCode.Remove(TrueValidateCodeCount); } //生成一帧的BMP图象 private void CreateImageBmp(out Bitmap ImageFrame) { //获得验证码字符 char[] CodeCharArray = ValidateCode.ToCharArray(0, ValidateCodeCount); //图像的宽度-与验证码的长度成一定比例 int ImageWidth = (int)(TrueValidateCodeCount * ValidateCodeSize * 1.3 + 4); //创建一个长20,宽iwidth的图像对象 ImageFrame = new Bitmap(ImageWidth, ImageHeight); //创建一个新绘图对象 Graphics ImageGraphics = Graphics.FromImage(ImageFrame); //清除背景色,并填充背景色 //Note:Color.Transparent为透明 ImageGraphics.Clear(Color.White); //绘图用的字体和字号 Font CodeFont = new Font(ValidateCodeFont, ValidateCodeSize, FontStyle.Bold); //绘图用的刷子大小 Brush ImageBrush = new SolidBrush(Color.Red); //字体高度计算 int FontHeight = (int)Math.Max(ImageHeight - ValidateCodeSize - 3, 2); //创建随机对象 Random rand = new Random(); //开始随机安排字符的位置,并画到图像里 for (int i = 0; i < TrueValidateCodeCount; i++) { //生成随机点,决定字符串的开始输出范围 int[] FontCoordinate = new int[2]; FontCoordinate[0] = (int)(i * ValidateCodeSize + rand.Next(1)) + 3; FontCoordinate[1] = rand.Next(FontHeight); Point FontDrawPoint = new Point(FontCoordinate[0], FontCoordinate[1]); //消除锯齿操作 if (FontTextRenderingHint) ImageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel; else ImageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; //格式化刷子属性-用指定的刷子、颜色等在指定的范围内画图 ImageGraphics.DrawString(CodeCharArray[i].ToString(), CodeFont, ImageBrush, FontDrawPoint); } ImageGraphics.Dispose(); } //处理生成的BMP private void DisposeImageBmp(ref Bitmap ImageFrame) { //创建绘图对象 Graphics ImageGraphics = Graphics.FromImage(ImageFrame); //创建铅笔对象 Pen ImagePen = new Pen(Color.Red, 1); //创建随机对象 Random rand = new Random(); //创建随机点 Point[] RandPoint = new Point[2]; //随机画线 for (int i = 0; i < 15; i++) { RandPoint[0] = new Point(rand.Next(ImageFrame.Width), rand.Next(ImageFrame.Height)); RandPoint[1] = new Point(rand.Next(ImageFrame.Width), rand.Next(ImageFrame.Height)); ImageGraphics.DrawLine(ImagePen, RandPoint[0], RandPoint[1]); } ImageGraphics.Dispose(); } //创建GIF动画 private void CreateImageGif() { Bitmap ImageFrame; Kissogram.Drawing.Gif.AnimatedGifEncoder GifPic = new Kissogram.Drawing.Gif.AnimatedGifEncoder(); MemoryStream BmpMemory = new MemoryStream(); GifPic.Start(); //确保视觉残留 GifPic.SetDelay(5); //-1:no repeat,0:always repeat GifPic.SetRepeat(0); for (int i = 0; i < 20; i++) { //创建一帧的图像 CreateImageBmp(out ImageFrame); //生成随机线条 DisposeImageBmp(ref ImageFrame); //输出绘图,将图像保存到指定的流 ImageFrame.Save(BmpMemory, System.Drawing.Imaging.ImageFormat.Png); GifPic.AddFrame(Image.FromStream(BmpMemory)); BmpMemory = new MemoryStream(); } GifPic.OutPut(ref BmpMemory); HttpContext.Current.Response.ClearContent(); //配置输出类型 HttpContext.Current.Response.ContentType = "image/Gif"; //输出内容 HttpContext.Current.Response.BinaryWrite(BmpMemory.ToArray()); BmpMemory.Close(); BmpMemory.Dispose(); } //输出验证码 public void OutPutValidate(string ValidateCodeSession) { CreateValidate(); CreateImageGif(); //把生成的验证码输入到SESSION HttpContext.Current.Session[ValidateCodeSession] = ValidateCode; } } }/*这些代码是我在网上找到的,当时也没怎么在意。后来,我发现这个东西很吊啊!动态跳跃的验证码.给看个实例吧: 这段源码标示是红色的是另外一个用于把单个图片封装成连续的GIF动画图片的类,所以直接有这些源码是不能创建出来的。 */
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Drawing;public partial class CheckCode : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { CreateCheckCodeImage(GenerateCheckCode()); } private string GenerateCheckCode() { int number; char code; string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i < 4; i++) { number = random.Next(); if (number % 2 == 0) code = (char)('0' + (char)(number % 10)); else code = (char)('A' + (char)(number % 26)); checkCode += code.ToString(); } Response.Cookies.Add(new HttpCookie("CheckCode", checkCode)); return checkCode; } private void CreateCheckCodeImage(string checkCode) { if (checkCode == null || checkCode.Trim() == String.Empty) return; System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的背景噪音线 for (int i = 0; i < 2; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点 for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } finally { g.Dispose(); image.Dispose(); } } }
实用简介明了 就行了 不要像Google那样 太复杂 人家很反感的 代码: using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Drawing;public partial class VerifyCode : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) {
//验证码长度(默认6个验证码的长度) int length = 4; public int Length { get { return length; } set { length = value; } } //验证码字体大小(为了显示扭曲效果,默认20像素,可以自行修改) int fontSize = 12; public int FontSize { get { return fontSize; } set { fontSize = value; } } //边框补(默认1像素) int padding = 1; public int Padding { get { return padding; } set { padding = value; } } //是否输出燥点(默认为输出) bool chaos = true; public bool Chaos { get { return chaos; } set { chaos = value; } } //输出燥点的颜色(默认灰色) Color chaosColor = Color.LightGray; public Color ChaosColor { get { return chaosColor; } set { chaosColor = value; } } //自定义背景色(默认白色) Color backgroundColor = Color.White; public Color BackgroundColor { get { return backgroundColor; } set { backgroundColor = value; } } //自定义随机颜色数组 Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; public Color[] Colors { get { return colors; } set { colors = value; } } //自定义字体数组 string[] fonts = { "Arial", "Georgia" }; public string[] Fonts { get { return fonts; } set { fonts = value; } } //自定义随机码字符串序列(使用逗号分隔) // string codeSerial = "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"; string codeSerial = "0,1,2,3,4,5,6,7,8,9"; public string CodeSerial { get { return codeSerial; } set { codeSerial = value; } } //生成校验码图片 public Bitmap CreateImageCode(string code) { int fSize = FontSize; int fWidth = fSize + Padding; int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2; int imageHeight = fSize * 2 + Padding; System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight); Graphics g = Graphics.FromImage(image); g.Clear(BackgroundColor); Random rand = new Random(); //给背景添加随机生成的燥点 if (this.Chaos) { Pen pen = new Pen(ChaosColor, 0); int c = Length * 15; for (int i = 0; i < c; i++) { int x = rand.Next(image.Width); int y = rand.Next(image.Height); g.DrawRectangle(pen, x, y, 1, 1); } } int left = 0, top = 0, top1 = 1, top2 = 1; int n1 = (imageHeight - FontSize - Padding * 2); int n2 = n1 / 4; top1 = n2; top2 = n2 * 2; Font f; Brush b; int cindex, findex; //随机字体和颜色的验证码字符 for (int i = 0; i < code.Length; i++) { cindex = rand.Next(Colors.Length - 1); findex = rand.Next(Fonts.Length - 1); f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold); b = new System.Drawing.SolidBrush(Colors[cindex]); if (i % 2 == 1) { top = top2; } else { top = top1; } left = i * fWidth; g.DrawString(code.Substring(i, 1), f, b, left, top); } //画一个边框 边框颜色为Color.White g.DrawRectangle(new Pen(Color.White, 0), 0, 0, image.Width - 1, image.Height - 1); g.Dispose(); return image; } //将创建好的图片输出到页面 public void CreateImageOnPage(string code, HttpContext context) { System.IO.MemoryStream ms = new System.IO.MemoryStream(); Bitmap image = this.CreateImageCode(code); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); context.Response.ClearContent(); context.Response.ContentType = "image/jpeg"; context.Response.BinaryWrite(ms.GetBuffer()); ms.Close(); ms = null; image.Dispose(); image = null; } //生成随机字符码 public string CreateVerifyCode(int codeLen) { if (codeLen == 0) { codeLen = Length; } string[] arr = CodeSerial.Split(','); string code = ""; int randValue = -1; Random rand = new Random(unchecked((int)DateTime.Now.Ticks)); for (int i = 0; i < codeLen; i++) { randValue = rand.Next(0, arr.Length - 1); code += arr[randValue]; } return code; } public string CreateVerifyCode() { return CreateVerifyCode(0); } }
public class VerificationCode : IHttpHandler { public void ProcessRequest(HttpContext context) { //生成随机的字符串 string randomString = GetRandomString(4); //将生成的字符串保存到数据库中 BoBoContext.Current.Session["Verification_Code"] = randomString; //生成验证码图片 GenerateVerificationCodeImage(randomString, context); } public bool IsReusable { get { return false; } } /// <summary> /// 得到随机字符串,长度自己定义 /// </summary> /// <param name="len">长度 </param> /// <returns>指定长度的随机字符串 </returns> private string GetRandomString(int len) { int num; int tem; Random random = new Random(); string rtuStr = ""; for (int i = 0; i < len; i++) { num = random.Next(); /* * 这里可以选择生成字符和数字组合的验证码 */ tem = num % 10 + '0';//生成数字 //tem = num % 26 + 'A';//生成字符 rtuStr += Convert.ToChar(tem).ToString(); } return rtuStr; } /// <summary> /// 生成验证码图片 /// </summary> /// <param name="randomString">随机字符串 </param> /// <param name="context">Http上下文 </param> private void GenerateVerificationCodeImage(string randomString, HttpContext context) { //string str = "OO00"; //前两个为字母O,后两个为数字0 int width = Convert.ToInt32(randomString.Length * 12); //计算图像宽度 Bitmap img = new Bitmap(width, 23); Graphics gfc = Graphics.FromImage(img); //产生Graphics对象,进行画图 gfc.Clear(Color.White); DrawLine(gfc, img); //写验证码,需要定义Font Font font = new Font("arial", 12, FontStyle.Bold); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.DarkOrchid, Color.Blue, 1.5f, true); gfc.DrawString(randomString, font, brush, 3, 2); DrawPoint(img); gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1); //将图像添加到页面 MemoryStream ms = new MemoryStream(); img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); //更改Http头 context.Response.ClearContent(); context.Response.ContentType = "image/gif"; context.Response.BinaryWrite(ms.ToArray()); //Dispose gfc.Dispose(); img.Dispose(); context.Response.End(); } /// <summary> /// 为生成的验证码图片增加线条 /// </summary> /// <param name="gfc">Graphics </param> /// <param name="img">初步生成的验证码图片 </param> private void DrawLine(Graphics gfc, Bitmap img) { Random random = new Random(); //选择画10条线,也可以增加,也可以不要线,只要随机杂点即可 for (int i = 0; i < 10; i++) { int x1 = random.Next(img.Width); int y1 = random.Next(img.Height); int x2 = random.Next(img.Width); int y2 = random.Next(img.Height); gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); //注意画笔一定要浅颜色,否则验证码看不清楚 } } /// <summary> /// 为生成的验证码增加点 /// </summary> /// <param name="img">初步生成的验证码图片 </param> private void DrawPoint(Bitmap img) { //选择画100个点,可以根据实际情况改变 Random random = new Random(); for (int i = 0; i < 100; i++) { int x = random.Next(img.Width); int y = random.Next(img.Height); img.SetPixel(x, y, Color.FromArgb(random.Next()));//杂点颜色随机 } int col = random.Next();//在一次的图片中杂店颜色相同 for (int i = 0; i < 100; i++) { int x = random.Next(img.Width); int y = random.Next(img.Height); img.SetPixel(x, y, Color.FromArgb(col)); } } } }都差不多啊
新建CheckCode.aspxusing System; using System.Drawing;public partial class ValidateCode : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { this.CreateCheckCodeImage(GenerateCheckCode()); } private string GenerateCheckCode() { int number; char code; string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i < 6; i++) { number = random.Next(); if (number % 2 == 0) code = (char)('0' + (char)(number % 10)); else code = (char)('A' + (char)(number % 26)); checkCode += code.ToString(); } Session["CheckCode"] = checkCode; //Response.Cookies.Add(new HttpCookie("CheckCode", checkCode)); return checkCode; } private void CreateCheckCodeImage(string checkCode) { if (checkCode == null || checkCode.Trim() == String.Empty) return; System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22); Graphics g = Graphics.FromImage(image); try { //生成随机生成器 Random random = new Random(); //清空图片背景色 g.Clear(Color.White); //画图片的背景噪音线 for (int i = 0; i < 25; i++) { int x1 = random.Next(image.Width); int x2 = random.Next(image.Width); int y1 = random.Next(image.Height); int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic)); System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true); g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点 for (int i = 0; i < 100; i++) { int x = random.Next(image.Width); int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next())); } //画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif); Response.ClearContent(); Response.ContentType = "image/Gif"; Response.BinaryWrite(ms.ToArray()); } finally { g.Dispose(); image.Dispose(); } }}使用,*.aspx内 <asp:Image ID="imgCheckCode" runat="server" ImageUrl="~/CheckCode.aspx" />
using System; using System.Collections; using System.ComponentModel; using System.Data; using System.Web; using System.Web.SessionState; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.HtmlControls;using System.Drawing; using System.Drawing.Imaging; using System.Drawing.Text;/**///// <summary> /// 页面验证码程序 /// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx"> /// </summary> public partial class VerifyCode : System.Web.UI.Page ...{ static string[] FontItems = new string[] ...{ "Arial", "Helvetica", "Geneva", "sans-serif", "Verdana" }; static Brush[] BrushItems = new Brush[] ...{ Brushes.OliveDrab, Brushes.ForestGreen, Brushes.DarkCyan, Brushes.LightSlateGray, Brushes.RoyalBlue, Brushes.SlateBlue, Brushes.DarkViolet, Brushes.MediumVioletRed, Brushes.IndianRed, Brushes.Firebrick, Brushes.Chocolate, Brushes.Peru, Brushes.Goldenrod }; static string[] BrushName = new string[] ...{ "OliveDrab", "ForestGreen", "DarkCyan", "LightSlateGray", "RoyalBlue", "SlateBlue", "DarkViolet", "MediumVioletRed", "IndianRed", "Firebrick", "Chocolate", "Peru", "Goldenrod" }; private static Color BackColor = Color.White; private static Pen BorderColor = Pens.DarkGray; private static int Width = 52; private static int Height = 21; private Random _random; private string _code; private int _brushNameIndex; override protected void OnInit(EventArgs e) ...{ // // CODEGEN: This call is required by the ASP.NET Web Form Designer. // //InitializeComponent(); //base.OnInit(e); }
using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Drawing;public partial class common_CheckCode : System.Web.UI.Page { private void Page_Load(object sender, System.EventArgs e) { this.CreateCheckCodeImage(GenerateCheckCode()); } private string GenerateCheckCode() { int number; char code; string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i < 4; i++) { number = random.Next(); if (number % 2 == 0) code = (char)('0' + (char)(number % 10)); else code = (char)('A' + (char)(number % 26)); checkCode += code.ToString(); } Session["checkcode"] = checkCode;
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;using System.IO;namespace Shop
{
/// <summary>
/// Summary description for ValidateCode.
/// </summary>
public class ValidateCode : System.Web.UI.Page
{
/// <summary>
/// Validation Code generated fromt these charaters.
/// Note: l,L 1(number), o, O, 0(number) are removed
/// </summary>
private const string strValidateCodeBound = "abcdefghijkmnpqrstuvwxyzABCDEFGHIJKLMNPQRSTUVWXYZ23456789";
private static string[] Fonts = new string[] { "Helvetica",
"Geneva",
"sans-serif",
"Verdana",
"Times New Roman",
"Courier New",
"Arial"
};
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load); }
#endregion /// <summary>
/// event handler of page load
/// </summary>
private void Page_Load(object sender, System.EventArgs e)
{
if(!IsPostBack)
{
string str_ValidateCode = GetRandomString(6); Session["ValidateCode"] = str_ValidateCode;
CreateImage(str_ValidateCode);
} } /// <summary>
/// Generate random string
/// </summary>
private string GetRandomString(int int_NumberLength)
{
string valString = string.Empty;
Random theRandomNumber = new Random((int)DateTime.Now.Ticks); for (int int_index = 0; int_index < int_NumberLength; int_index++)
valString += strValidateCodeBound[theRandomNumber.Next(strValidateCodeBound.Length - 1)].ToString(); return valString;
} /// <summary>
/// Generate random Color
/// </summary>
private Color GetRandomColor()
{
Random RandomNum_First = new Random((int)DateTime.Now.Ticks);
System.Threading.Thread.Sleep(RandomNum_First.Next(50));
Random RandomNum_Sencond = new Random((int)DateTime.Now.Ticks);
int int_Red = RandomNum_First.Next(256);
int int_Green = RandomNum_Sencond.Next(256);
int int_Blue = (int_Red + int_Green > 400) ? 0 : 400 - int_Red - int_Green;
int_Blue = (int_Blue > 255) ? 255 : int_Blue; return Color.FromArgb(int_Red, int_Green, int_Blue);
}
/// <summary>
/// Create Validation Code Image
/// </summary>
private void CreateImage(string str_ValidateCode)
{
int int_ImageWidth = str_ValidateCode.Length * 22;
Random newRandom = new Random(); Bitmap theBitmap = new Bitmap(int_ImageWidth + 6 , 38);
Graphics theGraphics = Graphics.FromImage(theBitmap); theGraphics.Clear(Color.White); drawLine(theGraphics, theBitmap, newRandom);
theGraphics.DrawRectangle(new Pen(Color.LightGray, 1), 0, 0, theBitmap.Width - 1, theBitmap.Height -1 ); for (int int_index = 0; int_index < str_ValidateCode.Length; int_index++)
{
Matrix X = new Matrix();
X.Shear((float)newRandom.Next(0,300)/1000 - 0.25f, (float)newRandom.Next(0,100)/1000 - 0.05f);
theGraphics.Transform = X;
string str_char = str_ValidateCode.Substring(int_index, 1);
System.Drawing.Drawing2D.LinearGradientBrush newBrush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, theBitmap.Width, theBitmap.Height), Color.Blue, Color.DarkRed, 1.2f, true);
Point thePos = new Point(int_index * 21 + 1 + newRandom.Next(3), 1 + newRandom.Next(13)); Font theFont = new Font(Fonts[newRandom.Next(Fonts.Length -1)], newRandom.Next(14,18), FontStyle.Bold); theGraphics.DrawString(str_char, theFont, newBrush, thePos);
} drawPoint(theBitmap, newRandom); MemoryStream ms = new MemoryStream();
theBitmap.Save(ms, ImageFormat.Png); Response.ClearContent();
Response.ContentType = "image/Png";
Response.BinaryWrite(ms.ToArray());
theGraphics.Dispose();
theBitmap.Dispose();
Response.End();
} /// <summary>
/// Draw Line for noise
/// </summary>
private void drawLine(Graphics gfc,Bitmap img, Random ran)
{
for (int i = 0; i < 10; i++)
{
int x1 = ran.Next(img.Width);
int y1 = ran.Next(img.Height);
int x2 = ran.Next(img.Width);
int y2 = ran.Next(img.Height);
gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
} /// <summary>
/// Draw Point for noise
/// </summary>
private void drawPoint(Bitmap img, Random ran)
{
for (int i = 0; i < 30; i++)
{
int x = ran.Next(img.Width);
int y = ran.Next(img.Height);
img.SetPixel(x,y,Color.FromArgb(ran.Next()));
} } }
}
{ public void ProcessRequest(HttpContext context)
{
//生成随机的字符串
string randomString = GetRandomString(4);
//将生成的字符串保存到数据库中
BoBoContext.Current.Session["Verification_Code"] = randomString;
//生成验证码图片
GenerateVerificationCodeImage(randomString, context);
} public bool IsReusable
{
get
{
return false;
}
}
/// <summary>
/// 得到随机字符串,长度自己定义
/// </summary>
/// <param name="len">长度</param>
/// <returns>指定长度的随机字符串</returns>
private string GetRandomString(int len)
{
int num;
int tem;
Random random = new Random();
string rtuStr = "";
for (int i = 0; i < len; i++)
{
num = random.Next();
/*
* 这里可以选择生成字符和数字组合的验证码
*/
tem = num % 10 + '0';//生成数字
//tem = num % 26 + 'A';//生成字符
rtuStr += Convert.ToChar(tem).ToString();
}
return rtuStr;
}
/// <summary>
/// 生成验证码图片
/// </summary>
/// <param name="randomString">随机字符串</param>
/// <param name="context">Http上下文</param>
private void GenerateVerificationCodeImage(string randomString, HttpContext context)
{
//string str = "OO00"; //前两个为字母O,后两个为数字0
int width = Convert.ToInt32(randomString.Length * 12); //计算图像宽度
Bitmap img = new Bitmap(width, 23);
Graphics gfc = Graphics.FromImage(img); //产生Graphics对象,进行画图
gfc.Clear(Color.White);
DrawLine(gfc, img);
//写验证码,需要定义Font
Font font = new Font("arial", 12, FontStyle.Bold);
System.Drawing.Drawing2D.LinearGradientBrush brush =
new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.DarkOrchid, Color.Blue, 1.5f, true);
gfc.DrawString(randomString, font, brush, 3, 2);
DrawPoint(img);
gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1);
//将图像添加到页面
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
//更改Http头
context.Response.ClearContent();
context.Response.ContentType = "image/gif";
context.Response.BinaryWrite(ms.ToArray());
//Dispose
gfc.Dispose();
img.Dispose();
context.Response.End();
}
/// <summary>
/// 为生成的验证码图片增加线条
/// </summary>
/// <param name="gfc">Graphics</param>
/// <param name="img">初步生成的验证码图片</param>
private void DrawLine(Graphics gfc, Bitmap img)
{
Random random = new Random(); //选择画10条线,也可以增加,也可以不要线,只要随机杂点即可
for (int i = 0; i < 10; i++)
{
int x1 = random.Next(img.Width);
int y1 = random.Next(img.Height);
int x2 = random.Next(img.Width);
int y2 = random.Next(img.Height);
gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); //注意画笔一定要浅颜色,否则验证码看不清楚
}
}
/// <summary>
/// 为生成的验证码增加点
/// </summary>
/// <param name="img">初步生成的验证码图片</param>
private void DrawPoint(Bitmap img)
{ //选择画100个点,可以根据实际情况改变
Random random = new Random(); for (int i = 0; i < 100; i++)
{
int x = random.Next(img.Width);
int y = random.Next(img.Height);
img.SetPixel(x, y, Color.FromArgb(random.Next()));//杂点颜色随机
} int col = random.Next();//在一次的图片中杂店颜色相同
for (int i = 0; i < 100; i++)
{
int x = random.Next(img.Width);
int y = random.Next(img.Height);
img.SetPixel(x, y, Color.FromArgb(col));
}
}
}
}
using System;
using System.IO;
using System.Web;
using System.Drawing;
namespace Kissogram.Common.Security
{
//GIF验证码类
public class Validate
{
//设置最少4位验证码
private byte TrueValidateCodeCount = 4;
public byte ValidateCodeCount
{
get
{
return TrueValidateCodeCount;
}
set
{
//验证码至少为3位
if (value > 4)
TrueValidateCodeCount = value;
}
}
protected string ValidateCode = "";
//是否消除锯齿
public bool FontTextRenderingHint = false;
//验证码字体
public string ValidateCodeFont = "Arial";
//验证码型号(像素)
public float ValidateCodeSize = 13;
public int ImageHeight = 23;
//定义验证码中所有的字符
public string AllChar = "1,2,3,4,5,6,7,8,9,0,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,W,X,Y,Z"; //获得随机四位数
private void CreateValidate()
{
ValidateCode = "";
//将验证码中所有的字符保存在一个字符串数组中
string[] CharArray = AllChar.Split(',');
int Temp = -1;
//生成一个随机对象
Random RandCode = new Random();
//根据验证码的位数循环
for (int i = 0; i < ValidateCodeCount; i++)
{
//主要是防止生成相同的验证码
if (Temp != -1)
{
//加入时间的刻度
RandCode = new Random(i * Temp * ((int)DateTime.Now.Ticks));
}
int t = RandCode.Next(35);
if (Temp == t)
{
//相等的话重新生成
CreateValidate();
}
Temp = t;
ValidateCode += CharArray[Temp];
}
//错误检测,去除超过指定位数的验证码
if (ValidateCode.Length > TrueValidateCodeCount)
ValidateCode = ValidateCode.Remove(TrueValidateCodeCount);
}
//生成一帧的BMP图象
private void CreateImageBmp(out Bitmap ImageFrame)
{
//获得验证码字符
char[] CodeCharArray = ValidateCode.ToCharArray(0, ValidateCodeCount);
//图像的宽度-与验证码的长度成一定比例
int ImageWidth = (int)(TrueValidateCodeCount * ValidateCodeSize * 1.3 + 4);
//创建一个长20,宽iwidth的图像对象
ImageFrame = new Bitmap(ImageWidth, ImageHeight);
//创建一个新绘图对象
Graphics ImageGraphics = Graphics.FromImage(ImageFrame);
//清除背景色,并填充背景色
//Note:Color.Transparent为透明
ImageGraphics.Clear(Color.White);
//绘图用的字体和字号
Font CodeFont = new Font(ValidateCodeFont, ValidateCodeSize, FontStyle.Bold);
//绘图用的刷子大小
Brush ImageBrush = new SolidBrush(Color.Red);
//字体高度计算
int FontHeight = (int)Math.Max(ImageHeight - ValidateCodeSize - 3, 2);
//创建随机对象
Random rand = new Random();
//开始随机安排字符的位置,并画到图像里
for (int i = 0; i < TrueValidateCodeCount; i++)
{
//生成随机点,决定字符串的开始输出范围
int[] FontCoordinate = new int[2];
FontCoordinate[0] = (int)(i * ValidateCodeSize + rand.Next(1)) + 3;
FontCoordinate[1] = rand.Next(FontHeight);
Point FontDrawPoint = new Point(FontCoordinate[0], FontCoordinate[1]);
//消除锯齿操作
if (FontTextRenderingHint)
ImageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.SingleBitPerPixel;
else
ImageGraphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
//格式化刷子属性-用指定的刷子、颜色等在指定的范围内画图
ImageGraphics.DrawString(CodeCharArray[i].ToString(), CodeFont, ImageBrush, FontDrawPoint);
}
ImageGraphics.Dispose();
}
//处理生成的BMP
private void DisposeImageBmp(ref Bitmap ImageFrame)
{
//创建绘图对象
Graphics ImageGraphics = Graphics.FromImage(ImageFrame);
//创建铅笔对象
Pen ImagePen = new Pen(Color.Red, 1);
//创建随机对象
Random rand = new Random();
//创建随机点
Point[] RandPoint = new Point[2];
//随机画线
for (int i = 0; i < 15; i++)
{
RandPoint[0] = new Point(rand.Next(ImageFrame.Width), rand.Next(ImageFrame.Height));
RandPoint[1] = new Point(rand.Next(ImageFrame.Width), rand.Next(ImageFrame.Height));
ImageGraphics.DrawLine(ImagePen, RandPoint[0], RandPoint[1]);
}
ImageGraphics.Dispose();
}
//创建GIF动画
private void CreateImageGif()
{
Bitmap ImageFrame;
Kissogram.Drawing.Gif.AnimatedGifEncoder GifPic = new Kissogram.Drawing.Gif.AnimatedGifEncoder();
MemoryStream BmpMemory = new MemoryStream();
GifPic.Start();
//确保视觉残留
GifPic.SetDelay(5);
//-1:no repeat,0:always repeat
GifPic.SetRepeat(0);
for (int i = 0; i < 20; i++)
{
//创建一帧的图像
CreateImageBmp(out ImageFrame);
//生成随机线条
DisposeImageBmp(ref ImageFrame);
//输出绘图,将图像保存到指定的流
ImageFrame.Save(BmpMemory, System.Drawing.Imaging.ImageFormat.Png);
GifPic.AddFrame(Image.FromStream(BmpMemory));
BmpMemory = new MemoryStream();
}
GifPic.OutPut(ref BmpMemory);
HttpContext.Current.Response.ClearContent();
//配置输出类型
HttpContext.Current.Response.ContentType = "image/Gif";
//输出内容
HttpContext.Current.Response.BinaryWrite(BmpMemory.ToArray());
BmpMemory.Close();
BmpMemory.Dispose();
}
//输出验证码
public void OutPutValidate(string ValidateCodeSession)
{
CreateValidate();
CreateImageGif();
//把生成的验证码输入到SESSION
HttpContext.Current.Session[ValidateCodeSession] = ValidateCode;
}
}
}/*这些代码是我在网上找到的,当时也没怎么在意。后来,我发现这个东西很吊啊!动态跳跃的验证码.给看个实例吧:
这段源码标示是红色的是另外一个用于把单个图片封装成连续的GIF动画图片的类,所以直接有这些源码是不能创建出来的。
*/
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;public partial class CheckCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
CreateCheckCodeImage(GenerateCheckCode());
} private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i < 4; i++)
{
number = random.Next(); if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26)); checkCode += code.ToString();
} Response.Cookies.Add(new HttpCookie("CheckCode", checkCode)); return checkCode;
} private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return; System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
Graphics g = Graphics.FromImage(image); try
{
//生成随机生成器
Random random = new Random(); //清空图片背景色
g.Clear(Color.White); //画图片的背景噪音线
for (int i = 0; i < 2; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
} Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next()));
} //画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
}
代码:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;public partial class VerifyCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//验证码长度(默认6个验证码的长度)
int length = 4;
public int Length
{
get { return length; }
set { length = value; }
} //验证码字体大小(为了显示扭曲效果,默认20像素,可以自行修改)
int fontSize = 12;
public int FontSize
{
get { return fontSize; }
set { fontSize = value; }
} //边框补(默认1像素)
int padding = 1;
public int Padding
{
get { return padding; }
set { padding = value; }
} //是否输出燥点(默认为输出)
bool chaos = true;
public bool Chaos
{
get { return chaos; }
set { chaos = value; }
} //输出燥点的颜色(默认灰色)
Color chaosColor = Color.LightGray;
public Color ChaosColor
{
get { return chaosColor; }
set { chaosColor = value; }
} //自定义背景色(默认白色)
Color backgroundColor = Color.White;
public Color BackgroundColor
{
get { return backgroundColor; }
set { backgroundColor = value; }
} //自定义随机颜色数组
Color[] colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
public Color[] Colors
{
get { return colors; }
set { colors = value; }
} //自定义字体数组
string[] fonts = { "Arial", "Georgia" };
public string[] Fonts
{
get { return fonts; }
set { fonts = value; }
} //自定义随机码字符串序列(使用逗号分隔)
// string codeSerial = "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";
string codeSerial = "0,1,2,3,4,5,6,7,8,9"; public string CodeSerial
{
get { return codeSerial; }
set { codeSerial = value; }
} //生成校验码图片
public Bitmap CreateImageCode(string code)
{
int fSize = FontSize;
int fWidth = fSize + Padding; int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2;
int imageHeight = fSize * 2 + Padding; System.Drawing.Bitmap image = new System.Drawing.Bitmap(imageWidth, imageHeight); Graphics g = Graphics.FromImage(image); g.Clear(BackgroundColor); Random rand = new Random(); //给背景添加随机生成的燥点
if (this.Chaos)
{
Pen pen = new Pen(ChaosColor, 0);
int c = Length * 15; for (int i = 0; i < c; i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height); g.DrawRectangle(pen, x, y, 1, 1);
}
} int left = 0, top = 0, top1 = 1, top2 = 1; int n1 = (imageHeight - FontSize - Padding * 2);
int n2 = n1 / 4;
top1 = n2;
top2 = n2 * 2; Font f;
Brush b; int cindex, findex; //随机字体和颜色的验证码字符
for (int i = 0; i < code.Length; i++)
{
cindex = rand.Next(Colors.Length - 1);
findex = rand.Next(Fonts.Length - 1); f = new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);
b = new System.Drawing.SolidBrush(Colors[cindex]); if (i % 2 == 1)
{
top = top2;
}
else
{
top = top1;
} left = i * fWidth; g.DrawString(code.Substring(i, 1), f, b, left, top);
} //画一个边框 边框颜色为Color.White
g.DrawRectangle(new Pen(Color.White, 0), 0, 0, image.Width - 1, image.Height - 1);
g.Dispose(); return image;
} //将创建好的图片输出到页面
public void CreateImageOnPage(string code, HttpContext context)
{
System.IO.MemoryStream ms = new System.IO.MemoryStream();
Bitmap image = this.CreateImageCode(code); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); context.Response.ClearContent();
context.Response.ContentType = "image/jpeg";
context.Response.BinaryWrite(ms.GetBuffer()); ms.Close();
ms = null;
image.Dispose();
image = null;
} //生成随机字符码
public string CreateVerifyCode(int codeLen)
{
if (codeLen == 0)
{
codeLen = Length;
} string[] arr = CodeSerial.Split(','); string code = ""; int randValue = -1; Random rand = new Random(unchecked((int)DateTime.Now.Ticks)); for (int i = 0; i < codeLen; i++)
{
randValue = rand.Next(0, arr.Length - 1); code += arr[randValue];
} return code;
} public string CreateVerifyCode()
{
return CreateVerifyCode(0);
}
}
public class VerificationCode : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
//生成随机的字符串
string randomString = GetRandomString(4);
//将生成的字符串保存到数据库中
BoBoContext.Current.Session["Verification_Code"] = randomString;
//生成验证码图片
GenerateVerificationCodeImage(randomString, context);
} public bool IsReusable
{
get
{
return false;
}
}
/// <summary>
/// 得到随机字符串,长度自己定义
/// </summary>
/// <param name="len">长度 </param>
/// <returns>指定长度的随机字符串 </returns>
private string GetRandomString(int len)
{
int num;
int tem;
Random random = new Random();
string rtuStr = "";
for (int i = 0; i < len; i++)
{
num = random.Next();
/*
* 这里可以选择生成字符和数字组合的验证码
*/
tem = num % 10 + '0';//生成数字
//tem = num % 26 + 'A';//生成字符
rtuStr += Convert.ToChar(tem).ToString();
}
return rtuStr;
}
/// <summary>
/// 生成验证码图片
/// </summary>
/// <param name="randomString">随机字符串 </param>
/// <param name="context">Http上下文 </param>
private void GenerateVerificationCodeImage(string randomString, HttpContext context)
{
//string str = "OO00"; //前两个为字母O,后两个为数字0
int width = Convert.ToInt32(randomString.Length * 12); //计算图像宽度
Bitmap img = new Bitmap(width, 23);
Graphics gfc = Graphics.FromImage(img); //产生Graphics对象,进行画图
gfc.Clear(Color.White);
DrawLine(gfc, img);
//写验证码,需要定义Font
Font font = new Font("arial", 12, FontStyle.Bold);
System.Drawing.Drawing2D.LinearGradientBrush brush =
new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, img.Width, img.Height), Color.DarkOrchid, Color.Blue, 1.5f, true);
gfc.DrawString(randomString, font, brush, 3, 2);
DrawPoint(img);
gfc.DrawRectangle(new Pen(Color.DarkBlue), 0, 0, img.Width - 1, img.Height - 1);
//将图像添加到页面
MemoryStream ms = new MemoryStream();
img.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
//更改Http头
context.Response.ClearContent();
context.Response.ContentType = "image/gif";
context.Response.BinaryWrite(ms.ToArray());
//Dispose
gfc.Dispose();
img.Dispose();
context.Response.End();
}
/// <summary>
/// 为生成的验证码图片增加线条
/// </summary>
/// <param name="gfc">Graphics </param>
/// <param name="img">初步生成的验证码图片 </param>
private void DrawLine(Graphics gfc, Bitmap img)
{
Random random = new Random(); //选择画10条线,也可以增加,也可以不要线,只要随机杂点即可
for (int i = 0; i < 10; i++)
{
int x1 = random.Next(img.Width);
int y1 = random.Next(img.Height);
int x2 = random.Next(img.Width);
int y2 = random.Next(img.Height);
gfc.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); //注意画笔一定要浅颜色,否则验证码看不清楚
}
}
/// <summary>
/// 为生成的验证码增加点
/// </summary>
/// <param name="img">初步生成的验证码图片 </param>
private void DrawPoint(Bitmap img)
{ //选择画100个点,可以根据实际情况改变
Random random = new Random(); for (int i = 0; i < 100; i++)
{
int x = random.Next(img.Width);
int y = random.Next(img.Height);
img.SetPixel(x, y, Color.FromArgb(random.Next()));//杂点颜色随机
} int col = random.Next();//在一次的图片中杂店颜色相同
for (int i = 0; i < 100; i++)
{
int x = random.Next(img.Width);
int y = random.Next(img.Height);
img.SetPixel(x, y, Color.FromArgb(col));
}
}
}
}都差不多啊
using System.Drawing;public partial class ValidateCode : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
this.CreateCheckCodeImage(GenerateCheckCode());
}
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i < 6; i++)
{
number = random.Next(); if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26)); checkCode += code.ToString();
}
Session["CheckCode"] = checkCode; //Response.Cookies.Add(new HttpCookie("CheckCode", checkCode)); return checkCode;
} private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return; System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
Graphics g = Graphics.FromImage(image); try
{
//生成随机生成器
Random random = new Random(); //清空图片背景色
g.Clear(Color.White); //画图片的背景噪音线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
} Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next()));
} //画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}}使用,*.aspx内
<asp:Image ID="imgCheckCode" runat="server" ImageUrl="~/CheckCode.aspx" />
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Text;/**///// <summary>
/// 页面验证码程序
/// 使用:在页面中加入HTML代码 <img src="VerifyCode.aspx">
/// </summary>
public partial class VerifyCode : System.Web.UI.Page
...{
static string[] FontItems = new string[] ...{ "Arial",
"Helvetica",
"Geneva",
"sans-serif",
"Verdana"
}; static Brush[] BrushItems = new Brush[] ...{ Brushes.OliveDrab,
Brushes.ForestGreen,
Brushes.DarkCyan,
Brushes.LightSlateGray,
Brushes.RoyalBlue,
Brushes.SlateBlue,
Brushes.DarkViolet,
Brushes.MediumVioletRed,
Brushes.IndianRed,
Brushes.Firebrick,
Brushes.Chocolate,
Brushes.Peru,
Brushes.Goldenrod
}; static string[] BrushName = new string[] ...{ "OliveDrab",
"ForestGreen",
"DarkCyan",
"LightSlateGray",
"RoyalBlue",
"SlateBlue",
"DarkViolet",
"MediumVioletRed",
"IndianRed",
"Firebrick",
"Chocolate",
"Peru",
"Goldenrod"
}; private static Color BackColor = Color.White;
private static Pen BorderColor = Pens.DarkGray;
private static int Width = 52;
private static int Height = 21; private Random _random;
private string _code;
private int _brushNameIndex;
override protected void OnInit(EventArgs e)
...{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
//InitializeComponent();
//base.OnInit(e);
}
/**//**//**//// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
...{
//this.Load += new System.EventHandler(this.Page_Load);
} /**//// <summary>
///
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void Page_Load(object sender, System.EventArgs e)
...{
if (!IsPostBack)
...{
//
// TODO : initialize
//
this._random = new Random();
this._code = GetRandomCode(); //
// TODO : use Session["code"] save the VerifyCode
//
Session["code"] = this._code; //
// TODO : output Image
//
this.SetPageNoCache();
this.OnPaint();
}
}
/**//**//**//// <summary>
/// 设置页面不被缓存
/// </summary>
private void SetPageNoCache()
...{
Response.Buffer = true;
Response.ExpiresAbsolute = System.DateTime.Now.AddSeconds(-1);
Response.Expires = 0;
Response.CacheControl = "no-cache";
Response.AppendHeader("Pragma","No-Cache");
} /**//**//**//// <summary>
/// 取得一个 4 位的随机码
/// </summary>
/// <returns></returns>
private string GetRandomCode()
...{
return Guid.NewGuid().ToString().Substring(0, 4);
} /**//**//**//// <summary>
/// 随机取一个字体
/// </summary>
/// <returns></returns>
private Font GetFont()
...{
int fontIndex = _random.Next(0, FontItems.Length);
FontStyle fontStyle = GetFontStyle(_random.Next(0, 2));
return new Font(FontItems[fontIndex], 12, fontStyle);
} /**//**//**//// <summary>
/// 取一个字体的样式
/// </summary>
/// <param name="index"></param>
/// <returns></returns>
private FontStyle GetFontStyle(int index)
...{
switch (index)
...{
case 0:
return FontStyle.Bold;
case 1:
return FontStyle.Italic;
default:
return FontStyle.Regular;
}
} /**//**//**//// <summary>
/// 随机取一个笔刷
/// </summary>
/// <returns></returns>
private Brush GetBrush()
...{
int brushIndex = _random.Next(0, BrushItems.Length);
_brushNameIndex = brushIndex;
return BrushItems[brushIndex];
} /**//**//**//// <summary>
/// 绘画事件
/// </summary>
private void OnPaint()
...{
Bitmap objBitmap = null;
Graphics g = null; try
...{
objBitmap = new Bitmap(Width, Height);
g = Graphics.FromImage(objBitmap); Paint_Background(g);
Paint_Text(g);
Paint_TextStain(objBitmap);
Paint_Border(g); objBitmap.Save(Response.OutputStream, ImageFormat.Gif);
Response.ContentType = "image/gif";
}
catch ...{}
finally
...{
if (null != objBitmap)
objBitmap.Dispose();
if (null != g)
g.Dispose();
}
} /**//**//**//// <summary>
/// 绘画背景颜色
/// </summary>
/// <param name="g"></param>
private void Paint_Background(Graphics g)
...{
g.Clear(BackColor);
} /**//**//**//// <summary>
/// 绘画边框
/// </summary>
/// <param name="g"></param>
private void Paint_Border(Graphics g)
...{
g.DrawRectangle(BorderColor, 0, 0, Width - 1, Height - 1);
} /**//**//**//// <summary>
/// 绘画文字
/// </summary>
/// <param name="g"></param>
private void Paint_Text(Graphics g)
...{
g.DrawString(_code, GetFont(), GetBrush(), 3, 1);
} /**//**//**//// <summary>
/// 绘画文字噪音点
/// </summary>
/// <param name="g"></param>
private void Paint_TextStain(Bitmap b)
...{
for (int n=0; n<30; n++)
...{
int x = _random.Next(Width);
int y = _random.Next(Height);
b.SetPixel(x, y, Color.FromName(BrushName[_brushNameIndex]));
} }
} 2 页面引用:<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />一般需要同时提供刷新功能(看不清楚换一张),代码如下 <asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" /> <A href="javascript:getimgcode()">刷新验证码</A>
如使用了母版页,则用如下代码:<img ID="getcode" alt="" src="VerifyCode.aspx" /> <%--<asp:Image ID="getcode" src="VerifyCode.aspx" runat="server" />--%>
<A href="javascript:getimgcode()">刷新验证码</A>
.
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;public partial class common_CheckCode : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
this.CreateCheckCodeImage(GenerateCheckCode());
} private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty; System.Random random = new Random(); for (int i = 0; i < 4; i++)
{
number = random.Next(); if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26)); checkCode += code.ToString();
} Session["checkcode"] = checkCode;
return checkCode;
} private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 20);
Graphics g = Graphics.FromImage(image); try
{
//生成随机生成器
Random random = new Random(); //清空图片背景色
g.Clear(Color.White); //画图片的背景噪音线
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height); g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
} Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2); //画图片的前景噪音点
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height); image.SetPixel(x, y, Color.FromArgb(random.Next()));
} //画图片的边框线
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1); System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}
}