.Net实现图片验证码。

第一次发博。话不多述,先看看页面展示效果。
在这里插入图片描述
验证码错误
在这里插入图片描述
验证码正确的页面
在这里插入图片描述

这是前台代码。有注释

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript">
        function check() {
            document.getElementById("image1").src = "/ashx/code.aspx?" + Math.random();
        }
        //实现点击图片更换验证码,因为验证码存在cookie,必须加随机数来实现更换Math.random()是碎机数,
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <table>
        <tr>
            <td>验证码</td>
            <td></td>
        </tr>
         <tr>
            <td runat="server">
                <input id="code" type="text" runat="server"/>
            </td>
            <td runat="server">
                <img alt="checkCodeImage" src="/ashx/code.aspx" runat="server" id="image1" width="80" height="40" onclick="check()"/>
                <%--图片是调用的另一个web页面,那一个web页面是碎机数生成的验证码图片,可以点下面超链接看那个web页面--%>
            </td>
        </tr>
        <tr>
            <td><input id="btn" type="button" runat="server" value="验证" onserverclick="btn_ServerClick"/></td>
            <td></td>
        </tr>
    </table>
        <a href="ashx/code.aspx">看验证码</a>
    </div>
    </form>
</body>
</html>

这是后台代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace zhaohaha1
{
    public partial class login : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        protected void btn_ServerClick(object sender, EventArgs e)
        {
            string code = Request.Form["code"].ToLower();
            //获取用户输入的验证码值并做字母小写的转换。
            string CheckCode = Request.Cookies["CheckCode"].Value.ToLower();
            //获取cookie传来的碎机数值并做字母小写的转换。
            if (code == CheckCode)//两值作比较。若相同
            {
                Response.Write("验证码正确");
            }
            else//两值作比较。若不相同
            {
                Response.Write("验证码错误");
            }
        }
    }
}

这是图片验证码生成的代码,这个前台不用写,只写后台

using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace zhaohaha1.ashx
{
    public partial class code : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            CreateCheckCodeImage(GenerateCheckCode());//调用的验证码图片方法,让用户加载出现验证码图。
        }


        private string GenerateCheckCode()//这个方法是生成随机数
        {
            int number;
            char code;
            string checkCode = string.Empty;
            Random random = new Random();
            //调用生成随机术的方法
            for (int i = 0; i < 4; i++)
            {
                number = random.Next();
                if (number % 2 == 0)
                    code = (char)('0' + (char)(number % 10));
                else
                    code = (char)('A' + (char)(number % 26));

                checkCode += code.ToString();
            }
            //这个for循环是生成4位数随机数的。
            Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
            //把生成的碎机数存到cookie
            return checkCode;
            //返回cookie
        }
        private void CreateCheckCodeImage(string checkCode)//这个方法是吧碎机数生成图片验证码的
        {
            if (checkCode == null || checkCode.Trim() == string.Empty)
                return;
            System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
            Graphics g = Graphics.FromImage(image);

            try
            {
                //生成随机生成器
                Random random = new Random();
                //清除图片背景色
                g.Clear(Color.White);
                //画图片的背景噪音线
                for (int i = 0; i < 2; i++)
                {
                    int x1 = random.Next(image.Width);
                    int x2 = random.Next(image.Width);
                    int y1 = random.Next(image.Height);
                    int y2 = random.Next(image.Height);
                    g.DrawLine(new Pen(Color.Black), x1, y1, x2, y2);
                }
                Font font = new Font("Arial", 12, (System.Drawing.FontStyle.Bold | FontStyle.Italic));
                System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(checkCode, font, brush, new PointF(2, 2));
                //画图片的前景噪音线
                for (int i = 0; i < 100; i++)
                {
                    int x = random.Next(image.Width);
                    int y = random.Next(image.Height);
                    image.SetPixel(x, y, Color.FromArgb(random.Next()));
                }
                //画图片的边框线
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType = "image/Gif";
                Response.BinaryWrite(ms.ToArray());
            }
            finally
            {
                g.Dispose();
                image.Dispose();
            }
        }
    }
}

好了 不喜勿喷,喜欢的点个关注,谢谢观看。如果还学不会,我上传压缩包可下载尝试。

请支持原创吧,我是赵哈哈。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力再努力zts

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值