MVC验证码生成类库

  1 public class ValidateCode
  2     {
  3         /// <summary>
  4         ///     验证码的最大长度
  5         /// </summary>
  6         public int MaxLength
  7         {
  8             get { return 10; }
  9         }
 10 
 11         /// <summary>
 12         ///     验证码的最小长度
 13         /// </summary>
 14         public int MinLength
 15         {
 16             get { return 1; }
 17         }
 18 
 19         /// <summary>
 20         ///     生成验证码
 21         /// </summary>
 22         /// <param name="length">指定验证码的长度</param>
 23         /// <returns></returns>
 24         public string CreateValidateCode(int length)
 25         {
 26             var randMembers = new int[length];
 27             var validateNums = new int[length];
 28             string validateNumberStr = "";
 29             //生成起始序列值
 30             var seekSeek = unchecked((int) DateTime.Now.Ticks);
 31             var seekRand = new Random(seekSeek);
 32             int beginSeek = seekRand.Next(0, Int32.MaxValue - length*10000);
 33             var seeks = new int[length];
 34             for (int i = 0; i < length; i++)
 35             {
 36                 beginSeek += 10000;
 37                 seeks[i] = beginSeek;
 38             }
 39             //生成随机数字
 40             for (int i = 0; i < length; i++)
 41             {
 42                 var rand = new Random(seeks[i]);
 43                 int pownum = 1*(int) Math.Pow(10, length);
 44                 randMembers[i] = rand.Next(pownum, Int32.MaxValue);
 45             }
 46             //抽取随机数字
 47             for (int i = 0; i < length; i++)
 48             {
 49                 string numStr = randMembers[i].ToString();
 50                 int numLength = numStr.Length;
 51                 var rand = new Random();
 52                 int numPosition = rand.Next(0, numLength - 1);
 53                 validateNums[i] = Int32.Parse(numStr.Substring(numPosition, 1));
 54             }
 55             //生成验证码
 56             for (int i = 0; i < length; i++)
 57             {
 58                 validateNumberStr += validateNums[i].ToString();
 59             }
 60             return validateNumberStr;
 61         }
 62 
 63         /// <summary>
 64         ///     创建验证码的图片
 65         /// </summary>
 66         /// <param name="containsPage">要输出到的page对象</param>
 67         /// <param name="validateNum">验证码</param>
 68         public byte[] CreateValidateGraphic(string validateCode)
 69         {
 70             var image = new Bitmap((int) Math.Ceiling(validateCode.Length*20.0), 31);
 71             Graphics g = Graphics.FromImage(image);
 72             try
 73             {
 74                 //生成随机生成器
 75                 var random = new Random();
 76                 //清空图片背景色
 77                 g.Clear(Color.White);
 78                 //画图片的干扰线
 79                 for (int i = 0; i < 25; i++)
 80                 {
 81                     int x1 = random.Next(image.Width);
 82                     int x2 = random.Next(image.Width);
 83                     int y1 = random.Next(image.Height);
 84                     int y2 = random.Next(image.Height);
 85                     g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
 86                 }
 87                 var font = new Font("Arial", 20, (FontStyle.Bold | FontStyle.Italic));
 88                 var brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height),
 89                     Color.Blue, Color.DarkRed, 1.2f, true);
 90                 g.DrawString(validateCode, font, brush, 3, 2);
 91                 //画图片的前景干扰点
 92                 for (int i = 0; i < 100; i++)
 93                 {
 94                     int x = random.Next(image.Width);
 95                     int y = random.Next(image.Height);
 96                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
 97                 }
 98                 //画图片的边框线
 99                 g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
100                 //保存图片数据
101                 var stream = new MemoryStream();
102                 image.Save(stream, ImageFormat.Jpeg);
103                 //输出图片流
104                 return stream.ToArray();
105             }
106             finally
107             {
108                 g.Dispose();
109                 image.Dispose();
110             }
111         }
112 
113         /// <summary>
114         ///     得到验证码图片的长度
115         /// </summary>
116         /// <param name="validateNumLength">验证码的长度</param>
117         /// <returns></returns>
118         public static int GetImageWidth(int validateNumLength)
119         {
120             return (int) (validateNumLength*12.0);
121         }
122 
123         /// <summary>
124         ///     得到验证码的高度
125         /// </summary>
126         /// <returns></returns>
127         public static double GetImageHeight()
128         {
129             return 22.5;
130         }
131     }

 

posted @ 2014-10-08 09:28  人生无赖  阅读(295)  评论(0编辑  收藏  举报