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