• 技术文章 >后端开发 >C#.Net教程

    asp.net生成验证码(纯数字)

    高洛峰高洛峰2017-01-13 14:54:29原创480
    CheckCode.cs

    using System; 
    using System.Data; 
    using System.Configuration; 
    using System.Web; 
    using System.Web.Security; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.WebControls.WebParts; 
    using System.Web.UI.HtmlControls; 
    using System.Drawing; 
    /// <summary> 
    /// CheckCode 的摘要说明 
    /// </summary> 
    public class CheckCode 
    { 
    public CheckCode() 
    { 
    // 
    // TODO: 在此处添加构造函数逻辑 
    // 
    } 
    public static void DrawImage() 
    { 
    CheckCode img = new CheckCode(); 
    HttpContext.Current.Session["CheckCode"] = img.RndNum(4); 
    img.checkCodes(HttpContext.Current.Session["CheckCode"].ToString()); 
    } 
    /// <summary> 
    /// 生成验证图片 
    /// </summary> 
    /// <param name="checkCode">验证字符</param> 
    private void checkCodes(string checkCode) 
    { 
    int iwidth = (int)(checkCode.Length * 13); 
    System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23); 
    Graphics g = Graphics.FromImage(image); 
    g.Clear(Color.White); 
    //定义颜色 
    Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }; 
    //定义字体 
    string[] font = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" }; 
    Random rand = new Random(); 
    //随机输出噪点 
    for (int i = 0; i < 50; i++) 
    { 
    int x = rand.Next(image.Width); 
    int y = rand.Next(image.Height); 
    g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1); 
    } 
    //输出不同字体和颜色的验证码字符 
    for (int i = 0; i < checkCode.Length; i++) 
    { 
    int cindex = rand.Next(7); 
    int findex = rand.Next(5); 
    Font f = new System.Drawing.Font(font[findex], 10, System.Drawing.FontStyle.Bold); 
    Brush b = new System.Drawing.SolidBrush(c[cindex]); 
    int ii = 4; 
    if ((i + 1) % 2 == 0) 
    { 
    ii = 2; 
    } 
    g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii); 
    } 
    //画一个边框 
    g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width - 1, image.Height - 1); 
    //输出到浏览器 
    System.IO.MemoryStream ms = new System.IO.MemoryStream(); 
    image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
    HttpContext.Current.Response.ClearContent(); 
    //Response.ClearContent(); 
    HttpContext.Current.Response.ContentType = "image/Jpeg"; 
    HttpContext.Current.Response.BinaryWrite(ms.ToArray()); 
    g.Dispose(); 
    image.Dispose(); 
    } 
    /// <summary> 
    /// 生成随机的字母 
    /// </summary> 
    /// <param name="VcodeNum">生成字母的个数</param> 
    /// <returns>string</returns> 
    private string RndNum(int VcodeNum) 
    { 
    string Vchar = "0,1,2,3,4,5,6,7,8,9"; 
    string[] VcArray = Vchar.Split(','); 
    string VNum = ""; //由于字符串很短,就不用StringBuilder了 
    int temp = -1; //记录上次随机数值,尽量避免生产几个一样的随机数 
    //采用一个简单的算法以保证生成随机数的不同 
    Random rand = new Random(); 
    for (int i = 1; i < VcodeNum + 1; i++) 
    { 
    if (temp != -1) 
    { 
    rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks)); 
    } 
    int t = rand.Next(VcArray.Length); 
    if (temp != -1 && temp == t) 
    { 
    return RndNum(VcodeNum); 
    } 
    temp = t; 
    VNum += VcArray[t]; 
    } 
    return VNum; 
    } 
    }

    再建立一个引用类的页面checkCode.aspx前台不用写东西,后台引用我们创建的类的DrawImage()方法即可。

    using System; 
    using System.Data; 
    using System.Configuration; 
    using System.Collections; 
    using System.Web; 
    using System.Web.Security; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Web.UI.WebControls.WebParts; 
    using System.Web.UI.HtmlControls; 
    public partial class checkCode : System.Web.UI.Page 
    { 
    protected void Page_Load(object sender, EventArgs e) 
    { 
    CheckCode.DrawImage(); 
    } 
    }

    下面我们在需要验证码的页面引用checkCode.aspx页面即可。
    前台

    <asp:TextBox ID="Validator" runat="server" Width="150px" ></asp:TextBox> 
    <img id="Img1" alt="看不清,请点击我!" onclick="this.src=this.src+'?'" src="checkCode.aspx" 
    style="width: 73px; height: 22px" align="left" /> 
    <asp:ImageButton ID="imgBtnLogin" runat="server" ImageUrl="~/Images/Login.GIF" 
    OnClick="imgBtnLogin_Click" />

    后台判断

    protected void imgBtnLogin_Click(object sender, ImageClickEventArgs e) 
    { 
    if(this.Validator.Text==Session["CheckCode"].ToString()) 
    { 
    //。。。。 
    } 
    else 
    { 
    Response.Write("<script>alert('验证码输入错误,请重新输入!');Location='MumberValidate.aspx'</script>"); 
    return; 
    } 
    }

    以上代码请根据实际情况作适当修改。

    更多asp.net生成验证码(纯数字)相关文章请关注PHP中文网!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:验证码
    上一篇:asp.net 验证码的简单制作(vb.net+C#) 下一篇:详解ASP.NET验证码的生成方法
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• asp.net中3种验证码示例(数字,数字字母混和,汉字)• SUNWEN教程之----C#进阶(五)• C#难点逐个击破(7):checked与unchecked• asp.net验证码的简单制作• C#学习日记21----封装 与 访问修饰符
    1/1

    PHP中文网