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

验证码制作

时间:2015-01-31 17:45:01      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:

 

 

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

  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         finally
117         {
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 ="yzm.aspx" alt ="看不清!请点击刷新!" onclick ="this.src=this.src+‘?‘" />

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

 

验证码制作

标签:

原文地址:http://www.cnblogs.com/KTblog/p/4264337.html

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