首页 > 代码库 > 验证码制作
验证码制作
没有使用一般处理程序,所以验证码的前台代码不需要编写,直接输出的是文件流,放到一个页面上就行了。
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+‘?‘"就是用来,刷新验证码的。
验证码制作
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。