asp.net图片验证码

简介: asp.net系统,在登录或注册时常提供数字或字符混合的验证码,这里介绍如何操作。1,Default 页面    protected void Button2_Click(object sender, EventArgs e)    {        if (Request.

asp.net系统,在登录或注册时常提供数字或字符混合的验证码,这里介绍如何操作。

1Default 页面

<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Button2_Click(object sender, EventArgs e)
    {
        if (Request.Cookies["ycode"] != null)
        {
            if (Request.Cookies["ycode"].Value.ToString() == this.TextBox1.Text.Trim())
            {
                Response.Redirect("Default2.aspx");
            }
        }
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    <script src="js/jquery.js" type="text/javascript"></script>
    <script src="js/JScript.js" type="text/javascript"></script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <img id="img1" src="CreateCode.aspx" alt="
点击" onclick="hp()"/>  

       <input id="Button1" type="button" value="button" onclick="return Button1_onclick()" /><br />    

        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="Button" /></div>
       
    </form>
</body>
</html>

2 CreateCode 页面

<%@ Page Language="C#" %>
<%@ Import Namespace="System.Drawing" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<script runat="server">

    protected void Page_Load(object sender, EventArgs e)
    {
        int nLen = 6;
        int nBmpWidth = 13 * nLen + 10;
        int nBmpHeight = 30;
        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(nBmpWidth, nBmpHeight);

        // 1. 生成随机背景颜色
        int nRed, nGreen, nBlue;   //
背景的三元色
        System.Random rd = new Random((int)System.DateTime.Now.Ticks);
        nRed = rd.Next(255) % 128 + 128;
        nGreen = rd.Next(255) % 128 + 128;
        nBlue = rd.Next(255) % 128 + 128;

        // 2. 填充位图背景
        System.Drawing.Graphics graph = System.Drawing.Graphics.FromImage(bmp);
        graph.FillRectangle(new SolidBrush(System.Drawing.Color.FromArgb(nRed, nGreen, nBlue))
            , 0
            , 0
            , nBmpWidth
            , nBmpHeight);


        // 3. 绘制干扰线条,采用比背景略深一些的颜色
        int nLines = 3;
        System.Drawing.Pen pen = new System.Drawing.Pen(System.Drawing.Color.FromArgb(nRed - 17, nGreen - 17, nBlue - 17), 2);
        for (int a = 0; a < nLines; a++)
        {
            int x1 = rd.Next() % nBmpWidth;
            int y1 = rd.Next() % nBmpHeight;
            int x2 = rd.Next() % nBmpWidth;
            int y2 = rd.Next() % nBmpHeight;
            graph.DrawLine(pen, x1, y1, x2, y2);
        }

        // 采用的字符集,可以随即拓展,并可以控制字符出现的几率
        string strCode = "abcdefghijklmcopqrstuvwxyz123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

        // 4. 循环取得字符,并绘制
        string strResult = "";
        for (int i = 0; i < nLen; i++)
        {
            int x = (i * 13 + rd.Next(3));
            int y = rd.Next(4) + 1;

            // 确定字体
            System.Drawing.Font font = new System.Drawing.Font("
宋体",
                16 + rd.Next() % 4,
                System.Drawing.FontStyle.Bold);
            char c = strCode[rd.Next(strCode.Length)];   //
随机获取字符
            strResult += c.ToString();

            // 绘制字符
            graph.DrawString(c.ToString(),
                font,
                new SolidBrush(System.Drawing.Color.FromArgb(nRed - 60 + y * 3, nGreen - 60 + y * 3, nBlue - 40 + y * 3)),
                x,
                y);
        }

        // 5. 输出字节流
        System.IO.MemoryStream bstream = new System.IO.MemoryStream();
        bmp.Save(bstream, System.Drawing.Imaging.ImageFormat.Jpeg);
        bmp.Dispose();
        graph.Dispose();

       //将正确的字保存到Cookie
        Response.Cookies["ycode"].Value = strResult;
    
        byte[] byteReturn = bstream.ToArray();
        bstream.Close();
                 
        Response.OutputStream.Write(byteReturn,0,byteReturn.Length);
    }
</script>

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>

    </div>
    </form>
</body>
</html>

3js 其中用到了jquery 技术


function hp()
{
    $("#img1").attr("src","CreateCode.aspx?r="+Math.random());
}

function Button1_onclick()
{
   var cookieString = new String(document.cookie);  
   var start=cookieString.indexOf("=");  
   var k=cookieString.substr(start+1,cookieString.length);    
  
   if($("#Text1").val()==k)
   {
      alert("
成功!");
   }
   else
   {
      alert("
验证码不正确!");
   }
}

相关文章
|
6月前
|
存储 SQL 开发框架
分享88个ASP贺卡图片源码,总有一款适合您
分享88个ASP贺卡图片源码,总有一款适合您
43 2
|
6月前
|
SQL 存储 开发框架
分享107个ASP贺卡图片源码,总有一款适合您
分享107个ASP贺卡图片源码,总有一款适合您
56 1
|
6月前
|
SQL 开发框架 JavaScript
分享66个ASP贺卡图片源码,总有一款适合您
分享66个ASP贺卡图片源码,总有一款适合您
56 0
|
1月前
|
数据采集 自然语言处理 Python
用 Python 生成并识别图片验证码
用 Python 生成并识别图片验证码
25 1
|
3月前
|
SQL 前端开发 NoSQL
SpringBoot+Vue 实现图片验证码功能需求
这篇文章介绍了如何在SpringBoot+Vue项目中实现图片验证码功能,包括后端生成与校验验证码的方法以及前端展示验证码的实现步骤。
SpringBoot+Vue 实现图片验证码功能需求
|
4月前
【node】图片验证码(svg-captcha)
【node】图片验证码(svg-captcha)
213 0
|
5月前
|
前端开发 JavaScript 数据库
四. Django项目之电商购物商城 -- 图片验证码生成
四. Django项目之电商购物商城 -- 图片验证码生成
|
5月前
图片验证码制作(附源码)
图片验证码制作(附源码)
|
6月前
|
数据采集 安全 前端开发
Java如何制作图片输入验证码
Java如何制作图片输入验证码
44 0
|
6月前
|
Java 数据安全/隐私保护
Java 图片验证码需求分析
Java 图片验证码需求分析
77 0