码迷,mamicode.com
首页 > 其他好文 > 详细

验证码的实现

时间:2014-07-19 12:15:14      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   width   

验证码的实现方式有很多种,我用的是:新建一个网页,在里面编写代码,然后实现验证码的产生,在然后通过img路径的修改实现。具体代码如下:

这是img的修改:

bubuko.com,布布扣

然后新建一个网站页面code.aspx,编辑代码如下:

bubuko.com,布布扣
  1 using System;
  2 using System.Collections.Generic;
  3 using System.Drawing;
  4 using System.Drawing.Drawing2D;
  5 using System.Drawing.Imaging;
  6 using System.IO;
  7 using System.Linq;
  8 using System.Text;
  9 using System.Web;
 10 using System.Web.UI;
 11 using System.Web.UI.WebControls;
 12 
 13 public partial class code : System.Web.UI.Page
 14 {
 15     private string code_str = string.Empty;
 16 
 17     private const int ImageHeigth = 22;             //验证码图片的高度
 18 
 19     private const double ImageLengthBase = 12.5;    //验证码图片中每个字符的宽度
 20 
 21     private const int ImageLineNumber = 25;         //噪音线的数量
 22 
 23     private const int ImagePointNumber = 100;       //噪点的数量
 24 
 25     private int length = 4;
 26 
 27     public string VALIDATECODEKEY;       //此处用来保存验证码到Session的Key的名称
 28 
 29 
 30 
 31 
 32     /// <summary>
 33 
 34     /// 产生随机的验证码并加入Session
 35 
 36     /// </summary>
 37 
 38     /// <param name="length">验证码长度</param>
 39 
 40     /// <returns></returns>
 41 
 42     public string CreateCode(int length)
 43     {
 44 
 45         if (length <= 0)
 46         {
 47 
 48             return string.Empty;
 49 
 50         }
 51 
 52         Random random = new Random();
 53 
 54         StringBuilder builder = new StringBuilder();
 55 
 56         //产生随机的验证码并拼接起来
 57 
 58         for (int i = 0; i < length; i++)
 59         {
 60 
 61             builder.Append(random.Next(0, 10));
 62 
 63         }
 64 
 65         this.code_str = builder.ToString();
 66 
 67         this.Session[VALIDATECODEKEY] = this.code_str;
 68         Session["code"] = code_str;
 69         return this.code_str;
 70 
 71     }
 72 
 73 
 74 
 75     /// <summary>
 76 
 77     /// 根据长度产生验证码
 78 
 79     /// 并将验证码画成图片
 80 
 81     /// </summary>
 82 
 83     /// <param name="length">验证码长度</param>
 84 
 85     public void CreateValidateImage(int length)
 86     {
 87 
 88         this.code_str = this.CreateCode(length);
 89 
 90         this.CreateValidateImage(this.code_str);
 91 
 92     }
 93 
 94     /// <summary>
 95 
 96     /// 根据产生的验证码生成图片
 97 
 98     /// </summary>
 99 
100     /// <param name="code">验证码</param>
101 
102     public void CreateValidateImage(string code)
103     {
104 
105         if (!string.IsNullOrEmpty(code))
106         {
107 
108             this.Session[VALIDATECODEKEY] = code;
109 
110             //初始化位图Bitmap对象,指定图片对象的大小(宽,高)
111 
112             Bitmap image = new Bitmap((int)Math.Ceiling((double)(code.Length * ImageLengthBase)), ImageHeigth);
113 
114             //初始化一块画布
115 
116             Graphics graphics = Graphics.FromImage(image);
117 
118             Random random = new Random();
119 
120             try
121             {
122 
123                 int num5;
124 
125                 graphics.Clear(Color.White);
126 
127                 //绘制噪音线
128 
129                 for (num5 = 0; num5 < ImageLineNumber; num5++)
130                 {
131 
132                     int num = random.Next(image.Width);
133 
134                     int num3 = random.Next(image.Height);
135 
136                     int num2 = random.Next(image.Width);
137 
138                     int num4 = random.Next(image.Height);
139 
140                     graphics.DrawLine(new Pen(Color.Silver), num, num3, num2, num4);
141 
142                 }
143 
144                 //验证码字体样式
145 
146                 Font font = new Font("Tahoma", 12, FontStyle.Italic | FontStyle.Bold);
147 
148                 LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
149 
150                 //绘制验证码到画布
151 
152                 graphics.DrawString(code, font, brush, (float)2, (float)2);
153 
154                 //绘制噪点
155 
156                 for (num5 = 0; num5 < ImagePointNumber; num5++)
157                 {
158 
159                     int x = random.Next(image.Width);
160 
161                     int y = random.Next(image.Height);
162 
163                     image.SetPixel(x, y, Color.FromArgb(random.Next()));
164 
165                 }
166 
167                 graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
168 
169                 MemoryStream stream = new MemoryStream();
170 
171                 //保存图片
172 
173                 image.Save(stream, ImageFormat.Gif);
174 
175                 base.Response.ClearContent();
176 
177                 base.Response.ContentType = "image/Gif";
178 
179                 base.Response.BinaryWrite(stream.ToArray());
180 
181             }
182 
183             finally
184             {
185 
186                 graphics.Dispose();
187 
188                 image.Dispose();
189 
190             }
191 
192         }
193 
194     }
195 
196     protected override void OnLoad(EventArgs e)
197     {
198 
199         this.CreateValidateImage(this.length);
200 
201     }
202 
203 
204 
205     // Properties
206 
207     public string Code
208     {
209 
210         get
211         {
212 
213             return this.Code;
214 
215         }
216 
217     }
218 
219     public int Length
220     {
221 
222         get
223         {
224 
225             return this.length;
226 
227         }
228 
229         set
230         {
231 
232             this.length = value;
233 
234         }
235 
236     }
237 
238 }
验证码

验证码的实现,布布扣,bubuko.com

验证码的实现

标签:style   blog   http   color   os   width   

原文地址:http://www.cnblogs.com/zyxdbk/p/3854641.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!