zoukankan      html  css  js  c++  java
  • asp.net验证码图片生成示例

        验证码,一个很常见的东西。不管你是使用者还是开发者,这个东西80%的人都见到过,但是之前有人给我说过这么一句话“内行看门道,外行看热闹!”,仔细琢磨一下还真的是那么一回事。对于怎么实现验证码,闲话不多扯,直接上代码。

    我们需要在前台代码中写一段<img>,src指向一张页面(ValidateImage.aspx)

    <html>
    <head>
    <title>数字验证码</title>
    <script language="javascript">
            function changeImg() {
                $("#imgCheckNo").attr("src", "ValidateImage.aspx?r=" + getRandom(999));
            }
            function getRandom(n) { return Math.floor(Math.random() * n + 1) }
    </script>
    </head>
    <body>
    <div>
    <img id="imgCheckNo" src="ValidateImage.aspx" style="border-color: #000000; border- 1px;border-style: Solid">
     <span onclick="changeImg();">看不清?换一张</span>
     </div>
    <div>
       <div class="labelCss">验证码:</div>
    <div>
    <asp:TextBox ID="tbxCheckNo" runat="server" CssClass="tbxCss"></asp:TextBox>
    </div>
    <div>
    <asp:Button ID="btnSubmit" runat="server" Text="立即注册" OnClick="btnSubmit_Click" />
    </div>
    

     </body>

    </html>

    //ValidateImage.aspx 用来生产验证码图片,并将验证码的码值保存到cookie中。 public partial class ValidateImage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { this.CreateCheckCodeImage(RndNum()); } /// <summary>生成验证码 /// </summary> /// <returns></returns> private string RndNum() { int number; char code; string checkCode = String.Empty; System.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(); } Response.Cookies.Add(new HttpCookie("yzmcode", checkCode)); return checkCode; } /// <summary>向页面生成验证码Gif图片 /// </summary> /// <param name="checkCode"></param> 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 < 25; 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.Silver), x1, y1, x2, y2); } Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.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, 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(); } } } //最后就是后台事件,判断当前验证码是否正确。 #region 页面控件事件 protected void btnSubmit_Click(object sender, EventArgs e) { if (String.Compare(Request.Cookies["yzmcode"].Value, tbxCheckNo.Text, true) != 0) { Response.Write("<script>alert('验证码错误!')</script>"); } else { // Response.Write("<script>alert('验证吗正确!!!')</script>"); } } #endregion
  • 相关阅读:
    .net 中 数据库的查询参数写法。微软其他开发环境同理
    【开源】女人值钱计算器,C++
    远程桌面的端口修改
    .net 中使用ActiveX控件的自动创建的包装器的问题(自动生成的Interop.Ax*Lib.dll)
    ASP.NET站点的同时部署给不同的客户。通过数据库配置站点的Top、版权、站点名称
    当下常见的十大(现在补充了,是十一大手机操作系统)手机(平板)操作系统
    项目外包,类似QQ这样界面的客户端,要求界面漂亮,功能是帮助客户完成在线业务的功能。
    stdoled.dll 的问题
    dotnet调用外部dll中,参数数据类型的问题
    前两天用VC6做的修改远程桌面端口的命令行小程序,源码。
  • 原文地址:https://www.cnblogs.com/felix-wang/p/6943349.html
Copyright © 2011-2022 走看看