首页 > 代码库 > 验证码制作

验证码制作

 

 

没有使用一般处理程序,所以验证码的前台代码不需要编写,直接输出的是文件流,放到一个页面上就行了。

  1 using System;  2 using System.Collections.Generic;  3 using System.Linq;  4 using System.Web;  5 using System.Web.UI;  6 using System.Web.UI.WebControls;  7   8 using System.Drawing;  9  10 public partial class yzm : System.Web.UI.Page 11 { 12     protected void Page_Load(object sender, EventArgs e) 13     { 14         createyzm(random()); 15     } 16  17     /// <summary> 18     /// 这个方法是用于生成随机数 19     /// </summary> 20     /// <returns>生成的随机数</returns> 21     public string random() 22     { 23         int number;//创建一个整型变量,用于存储的单个随机数. 24  25         char a = new char();//创建一个字符变量,用于存储有整型转换成字符型的变量. 26  27         string b = string.Empty;//创建一个字符串变量,用于存储生成的随机数字符串. 28  29         Random rm = new Random();//创建一个随机数对象rm, 用于获取随机数. 30  31         //循环,用于生成单个随机数,以及把单个随机数,拼合成字符串. 32         for (int i = 0; i < 4; i++) 33         { 34             number = rm.Next();//生成随机数. 35  36             a = (char)(0 + (char)(number % 10));//把生成的随机数,无论是多大,只要除于10,得到的余数都是个位数,然后把他们转换成char类型的字符. 37  38             b += a.ToString();//把获得的单个字符,累加成一个字符创,其中一定要把,字符类型,转换成字符串类型. 39         } 40  41         Response.Cookies.Add(new HttpCookie("checkcode", b));//把生成的随机数字符串,放到创建的名为checkcode的cookies中,以便于,其他页面的调用时获取. 42  43         return b;//同时把生成的随机数返回(传出),以便于验证码制作. 44     } 45  46     /// <summary> 47     /// 这个方法是用于制作验证码 48     /// </summary> 49     /// <param name="sjs">接收random()方法生成的随机数</param> 50     public void createyzm(string sjs) 51     { 52         if (null == sjs && sjs.Trim() == string.Empty) 53         { 54             return; 55         } 56  57         System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling(sjs.Length * 12.5), 22);//方法的重载,用于制定的大小初始化System.Drawing.Bitmap类的新实例,第一个参数是宽,第二个参数是高,单位是像素. 58  59         Graphics g = Graphics.FromImage(image);//从指定的 System.Drawing.Image 创建新的 System.Drawing.Graphics。 60  61         try 62         { 63             Random random = new Random();//创建随机数生成器. 64  65             g.Clear(Color.White);//清空背景色. 66  67             //绘制噪音线 68             for (int i = 0; i <10; i++) 69             { 70                 int x1 = random.Next(image.Width); 71                 int x2 = random.Next(image.Width); 72                 int y1 = random.Next(image.Height); 73                 int y2 = random.Next(image.Height); 74  75                 g.DrawLine(new Pen(Color.FromArgb( random.Next())), x1, x2, y1, y2);//绘制一条连接由坐标对指定的两个点的线条。颜色是随机的使用color.fromArgb(random.Next())。 76             } 77  78             Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold));//设置文本的字体、字号和字形。 79  80             System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Width), Color.Blue, Color.OliveDrab, 1.2f, true);//设置绘制线条的线性渐变. 81  82             g.DrawString(sjs, font, brush, 2, 2);//在指定位置并且用指定的 System.Drawing.Brush 和 System.Drawing.Font 对象绘制指定的文本字符串。 83  84             //绘制噪音点 85             for (int i = 0; i < 100; i++) 86             { 87                 int x = random.Next(image.Width); 88                 int y = random.Next(image.Height); 89  90                 image.SetPixel(x, y, Color.FromArgb(random.Next()));//绘制随机点,其中颜色也是随机的. 91             } 92  93             //绘制验证码边框线 94             //参数一:确定矩形的颜色,宽度,和样式。 95             //参数二:要绘制的矩形的左上角的x坐标。 96             //参数三:要绘制矩形的左上角y的坐标。 97             //参数四:要绘制矩形的宽度。 98             //参数五:要绘制矩形的高度。 99             g.DrawRectangle(new Pen(Color.Black), 0, 0, image.Width - 1, image.Height - 1);100 101             //输出到页面上102             System.IO.MemoryStream ms = new System.IO.MemoryStream();//创建支持存储区为内存的流。103 104             image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);//将图像以指定的格式保存到指定的流中。其中ImageFormat的作用是指定图像的文件格式。105 106             Response.ClearContent();//清除缓冲区流中的所有内容输出。107 108             Response.ContentType = "image/Gif";//获取或设置输出流的 http mime 类型。109 110             Response.BinaryWrite(ms.ToArray());//将二进制字符串写入 http 输出流。111         }112         catch (Exception ex)113         {114             throw ex;115         }116         finally117         {118             g.Dispose();//释放其使用的资源119             image.Dispose();//释放其使用的资源.120         }121     }122 }

 

下面是怎么调用制作好的验证码文件流:

1 <td>验证码:</td><td><asp:TextBox ID ="yzm" runat ="server" Width ="60px"></asp:TextBox><img id ="imagecode" src =http://www.mamicode.com/"yzm.aspx" alt ="看不清!请点击刷新!" onclick ="this.src=http://www.mamicode.com/this.src+‘?‘" />

其中,src只想的就是输出验证码的网页文件yzm.aspx。img控件的onclik事件onclick ="this.src=http://www.mamicode.com/this.src+‘?‘"就是用来,刷新验证码的。

 

验证码制作