asp.net登录验证码实现方法_实用技巧

前端添加的标签和方法:
验证码:

复制代码 代码如下:

<input id="txtVerifyCode" type="text" maxlength="5" style="line-height: 30px;  height: 30px; width: 80px;border:solid 1px #d4d4d4;" class="input"/> <img src="" alt="点击刷新" id="imgValidateCode" style="width: 100px; height: 30px; line-height: 30px; vertical-align: middle;" />  点击图片刷新</p>//标签

$(function () {
      $("#imgValidateCode").click(function () {
        DoFresh();
      });
      DoFresh();
    })
function DoFresh() {
      var img = $("#imgValidateCode");
      img.attr("src", "VerifyCode.aspx?random=" + Math.random());

    } //添加的方法,src是生成图片的aspx的地址 

然后在项目中在新建一个VerifyCode.aspx,下面是aspx的代码:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="VerifyCode.aspx.cs" Inherits="Form.VerifyCode" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
 <head id="Head1" runat="server">

   <title></title>

 </head>
 <body>
   <form id="form1" runat="server">
   <div>

  </div>
   </form>

 </body>
 </html> 

接着是aspx.cs的代码:

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

using System.Drawing;

namespace Form
{
  public partial class VerifyCode : System.Web.UI.Page
  {
    public static string HZ;
    /// <summary>
    /// 验证码的最大长度
    /// </summary>
    public int MaxLength
    {
      get { return 10; }

    }
    /// <summary>
    /// 验证码的最小长度
    /// </summary>
    public int MinLength
    {
      get { return 1; }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
      string[] str = CreateValidateNumber(4);
      string strcode = string.Empty;
      for (int i = 0; i < str.Length; i++)
      {
      strcode += str[i];

      }
    CreateCheckCodeImage(str);
      HZ = strcode;
      Response.Write(HZ);
     //验证码存入session
      Session["ValidateCode"] = HZ;
    }

    /// <summary>
    /// 生成验证码
    /// </summary>
    /// <param name="length">指定验证码的长度</param>
    /// <returns>验证码</returns>
    public string[] CreateValidateNumber(int length)

    {
      string Vchar = "1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,p" +

      ",q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q" +
      ",R,S,T,U,V,W,X,Y,Z";

      string[] VcArray = Vchar.Split(new Char[] { ',' });//拆分成数组
       string[] num = new string[length];

      int temp = -1;//记录上次随机数值,尽量避避免生产几个一样的随机数

     Random rand = new Random();

      //采用一个简单的算法以保证生成随机数的不同

      for (int i = 1; i < length + 1; i++)

      {

        if (temp != -1)

        {

          rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));

        }
        int t = rand.Next(VcArray.Length-1);
        if (temp != -1 && temp == t)
        {
          return CreateValidateNumber(length);

        }

        temp = t;
        num[i - 1] = VcArray[t];
        //num.SetValue(VcArray[t]);
        //VNum += VcArray[t];

      }
      return num;
    }

   private void CreateCheckCodeImage(string[] checkCode)
    {
      if (checkCode == null || checkCode.Length <= 0)
        return;
      System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 32.5)), 60);
      System.Drawing.Graphics g = Graphics.FromImage(image);
     try
      {
       //生成随机生成器

        Random random = new Random();

       //清空图片背景色

        g.Clear(Color.White);

       //定义颜色

        Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };

        //画图片的背景噪音线
        for (int i = 0; i < 25; i++)

        {
          int cindex = random.Next(7);
          int findex = random.Next(5);
          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(c[cindex]), x1, y1, x2, y2);
        }
        //定义字体
        string[] f = { "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" };

       for (int k = 0; k <= checkCode.Length - 1; k++)
        {
          int cindex = random.Next(7);
          int findex = random.Next(5);
          Font drawFont = new Font(f[findex], 26, (System.Drawing.FontStyle.Bold));
          SolidBrush drawBrush = new SolidBrush(c[cindex]);
          float x = 5.0F;
          float y = 0.0F;
          float width = 42.0F;
          float height = 48.0F;
          int sjx = random.Next(10);
          int sjy = random.Next(image.Height - (int)height);

          RectangleF drawRect = new RectangleF(x + sjx + (k * 25), y + sjy, width, height);
          StringFormat drawFormat = new StringFormat();
          drawFormat.Alignment = StringAlignment.Center;
        g.DrawString(checkCode[k], drawFont, drawBrush, drawRect, drawFormat);
        }
        //画图片的前景噪音点
        for (int i = 0; i < 500; i++)
        {
          int x = random.Next(image.Width);
          int y = random.Next(image.Height); 

          image.SetPixel(x, y, Color.FromArgb(random.Next()));

        }

        int cindex1 = random.Next(7);

        //画图片的边框线

        g.DrawRectangle(new Pen(c[cindex1]), 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();

      }

    }

  }

}

于是!就可以生成验证码了,然后自己再把编写验证版的判断逻辑写好就可以啦!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索asp.net
, 登录
验证码
,以便于您获取更多的相关知识。

时间: 2024-08-31 07:19:24

asp.net登录验证码实现方法_实用技巧的相关文章

asp.net简单生成验证码的方法_实用技巧

本文实例讲述了asp.net简单生成验证码的方法.分享给大家供大家参考,具体如下: 1.新建一个一般处理程序 namespace WebApplication1 { /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfil

asp.net简单实现单点登录(SSO)的方法_实用技巧

本文实例讲述了asp.net简单实现单点登录(SSO)的方法.分享给大家供大家参考,具体如下: 单点登录(Single Sign On , 简称 SSO )是目前比较流行的服务于企业业务整合的解决方案之一, SSO 使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统 CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架(耶鲁大学开发)主要用于Java Php 有兴趣大家可以研究下.. 下面是一个简单实现单点登录的

ASP.NET读取RSS的方法_实用技巧

RSS对于网站有着很重要的用途,本文即以实例展示了ASP.NET读取RSS的方法,供大家参考借鉴,具体方法如下: 主要功能代码如下: /// <summary> /// 加载RSS /// </summary> /// <param name="RssUrl">RSS地址</param> /// <param name="RssCount">要提取的文章数量</param> /// <re

ASP.NET静态页生成方法_实用技巧

本文实例讲述了ASP.NET静态页生成方法.分享给大家供大家参考.具体实现方法如下: 一.问题: 由于业务需要,得把页面按照模板页生成静态页面,所以自己就琢磨了下,写些思路,以备日后需要的时候用. 二.解决方法: 静态页生成用到最多的就是匹配跟替换了,首先得读取模板页的html内容,然后进行你自己定义的标签匹配,比如说我要把我定义的标题标签换成读取数据库的标题内容,那么可以直接读取数据库的标题,然后直接进行替换,然后生成html文件就OK了. 具体代码如下: 复制代码 代码如下: /// <su

asp.net 包含文件的方法_实用技巧

在ASP.NET包含文件的方法有: 1.<% Response.WriteFile("skin/default/footer.txt")%> 2.<% server.execute("skin/default/footer.txt")%> 3.StreamReader 对象将包含文件写到 HTTP 内容流中 //me:网上说asp.net中用include也可以的.. include和Server.Execute有什么区别? server.e

asp.net+jquery ajax无刷新登录的实现方法_实用技巧

因为工作需要研究了一下 js的ajax,下面是成果.主要是三部分:一.js部分 友情提示注意js部分中的 $("#btn_login")中的return false:这个可以阻止回转服务器不然还是会刷新 复制代码 代码如下: $(document).ready(function () {    $("#btn_login").click(function () {        postlogin();        return false;    });});

ASP.NET 跨页面传值方法_实用技巧

1. 使用QueryString变量 QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不能用这个方法了.下面是一个例子: a.aspx的C#代码 复制代码 代码如下: private void Button1_Click(object sender, System.EventArgs e) { string s_url; s_url = "b.aspx?

asp.net querystring乱码解决方法_实用技巧

正常的情况下,现在asp.net的网站很多都直接使用UTF8来进行页面编码的,这与Javascript缺省网站的编码是相同的,但是也有相当一部分采用GB2312 对于GB2312的网站如果直接用javascript进行ajax数据提交,例如:http://www.xxx.com/accept.aspx?name=张三,或者说在UTF8的网站上用以下asp.net的代码进行提交,也是不行的,会导致querystring乱码. 复制代码 代码如下: WebRequest request = WebR

ASP.NET登录注册页面实现_实用技巧

如何利用Visual  studio 2010创建一个ASP网站? [文件]-->[新建]-->[网站]-->[ASP.Net网站]--[完成] 默认页面Default.aspx 创建以上界面: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="UserLogin.aspx.cs" Inherits="UserLogin" %> <