你的位置:首页 > ASP.net教程

[ASP.net教程]创建数字验证码


 1 public class ValidateCode 2   { 3     public ValidateCode() 4     { 5     } 6     /// <summary> 7     /// 验证码的最大长度 8     /// </summary> 9     public int MaxLength 10     { 11       get { return 10; } 12     } 13     /// <summary> 14     /// 验证码的最小长度 15     /// </summary> 16     public int MinLength 17     { 18       get { return 1; } 19     } 20     /// <summary> 21     /// 生成验证码 22     /// </summary> 23     /// <param name="length">指定验证码的长度</param> 24     /// <returns>验证码字符串</returns> 25     public string CreateValidateCode(int length) 26     { 27       int[] randMembers = new int[length]; 28       int[] validateNums = new int[length]; 29       string validateNumberStr = ""; 30       //生成起始序列值 31       int seekSeek = unchecked((int)DateTime.Now.Ticks); 32       Random seekRand = new Random(seekSeek); 33       int beginSeek = (int)seekRand.Next(0, Int32.MaxValue - length * 10000); 34       int[] seeks = new int[length]; 35       for (int i = 0; i < length; i++) 36       { 37         beginSeek += 10000; 38         seeks[i] = beginSeek; 39       } 40       //生成随机数字 41       for (int i = 0; i < length; i++) 42       { 43         Random rand = new Random(seeks[i]); 44         int pownum = 1 * (int)Math.Pow(10, length); 45         randMembers[i] = rand.Next(pownum, Int32.MaxValue); 46       } 47       //抽取随机数字 48       for (int i = 0; i < length; i++) 49       { 50         string numStr = randMembers[i].ToString(); 51         int numLength = numStr.Length; 52         Random rand = new Random(); 53         int numPosition = rand.Next(0, numLength - 1); 54         validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1)); 55       } 56       //生成验证码 57       for (int i = 0; i < length; i++) 58       { 59         validateNumberStr += validateNums[i].ToString(); 60       } 61       return validateNumberStr; 62     } 63    //======================在webform中的写法============================ 64     /// <summary> 65     /// 创建验证码的图片 66     /// </summary> 67     /// <param name="containsPage">要输出到的page对象</param> 68     /// <param name="validateNum">验证码</param> 69     public void CreateValidateGraphic(string validateCode, HttpContext context) 70     { 71       Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22); 72       Graphics g = Graphics.FromImage(image); 73       try 74       { 75         //生成随机生成器 76         Random random = new Random(); 77         //清空图片背景色 78         g.Clear(Color.White); 79         //画图片的干扰线 80         for (int i = 0; i < 25; i++) 81         { 82           int x1 = random.Next(image.Width); 83           int x2 = random.Next(image.Width); 84           int y1 = random.Next(image.Height); 85           int y2 = random.Next(image.Height); 86           g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2); 87         } 88         Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic)); 89         LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), 90         Color.Blue, Color.DarkRed, 1.2f, true); 91         g.DrawString(validateCode, font, brush, 3, 2); 92         //画图片的前景干扰点 93         for (int i = 0; i < 100; i++) 94         { 95           int x = random.Next(image.Width); 96           int y = random.Next(image.Height); 97           image.SetPixel(x, y, Color.FromArgb(random.Next())); 98         } 99         //画图片的边框线100         g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);101         //保存图片数据102         MemoryStream stream = new MemoryStream();103         image.Save(stream, ImageFormat.Jpeg);104         //输出图片流105         context.Response.Clear();106         context.Response.ContentType = "image/jpeg";107         context.Response.BinaryWrite(stream.ToArray());108       }109       finally110       {111         g.Dispose();112         image.Dispose();113       }114     }115     /// <summary>116     /// 得到验证码图片的长度117     /// </summary>118     /// <param name="validateNumLength">验证码的长度</param>119     /// <returns></returns>120     public static int GetImageWidth(int validateNumLength)121     {122       return (int)(validateNumLength * 12.0);123     }124     /// <summary>125     /// 得到验证码的高度126     /// </summary>127     /// <returns></returns>128     public static double GetImageHeight()129     {130       return 22.5;131     }132 133     //===============在mvc中的写法=========================134     //C# MVC 升级版135     /// <summary>136     /// 创建验证码的图片137     /// </summary>138     /// <param name="containsPage">要输出到的page对象</param>139     /// <param name="validateNum">验证码</param>140     public byte[] CreateValidateGraphic(string validateCode)141     {142       Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), 22);143       Graphics g = Graphics.FromImage(image);144       try145       {146         //生成随机生成器147         Random random = new Random();148         //清空图片背景色149         g.Clear(Color.White);150         //画图片的干扰线151         for (int i = 0; i < 25; i++)152         {153           int x1 = random.Next(image.Width);154           int x2 = random.Next(image.Width);155           int y1 = random.Next(image.Height);156           int y2 = random.Next(image.Height);157           g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);158         }159         Font font = new Font("Arial", 12, (FontStyle.Bold | FontStyle.Italic));160         LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),161         Color.Blue, Color.DarkRed, 1.2f, true);162         g.DrawString(validateCode, font, brush, 3, 2);163         //画图片的前景干扰点164         for (int i = 0; i < 100; i++)165         {166           int x = random.Next(image.Width);167           int y = random.Next(image.Height);168           image.SetPixel(x, y, Color.FromArgb(random.Next()));169         }170         //画图片的边框线171         g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);172         //保存图片数据173         MemoryStream stream = new MemoryStream();174         image.Save(stream, ImageFormat.Jpeg);175         //输出图片流176         return stream.ToArray();177       }178       finally179       {180         g.Dispose();181         image.Dispose();182       }183     }184   }

上面是生成验证码以及验证码图片

下面是怎么使用:

1  string code=vCode.CreateValidateCode(4);//得到生成的验证码2  byte[] bcode=vCode.CreateValidateGraphic(code);//将验证码创建成图片的二进制格式