zoukankan      html  css  js  c++  java
  • 登陆框中用到的验证码

    在登陆框中,用一个图片控件:

              <div id="CheckDiv" runat="server">
    <label>验证码:</label>
    <asp:TextBox ID="tbCode" runat="server"/>
    <img id="imgCode" src="CheckCode.aspx" alt="看不清?" onclick="javascript:GetCheckCode()"/>
    </div>


    GetCheckCode是JS事件,用来手动刷新验证码:

    function GetCheckCode() {
    document.getElementById("imgCode").src = "CheckCode.aspx";
    }

    最好,来到重要的验证码生成页面。由上面的引用已经可以看到,CheckCode.aspx是一个页面,而且这个页面的主要职责就是输出一个位图图象。PS.这个页面的前端代码没有任何额外的,就是新建时的默认。

    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 KeySystem
    {
    public partial class CheckCode : 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();
    code =(char)('0'+(char)(number % 10));
    checkCode += code.ToString();
    }
    Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
    return checkCode;
    }

    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 System.Drawing.Font("Arial", 12, System.Drawing.FontStyle.Bold);

    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,Brushes.Black,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();
    }
    }
    }
    }





    作者:Ivan
    个人网站:http://www.IvanBy.com
  • 相关阅读:
    Ext checkbox
    Ext4.1 grid 多选(可无checkbox)
    System.Web.HttpContext.Current.Session获取值出错
    Ext4.1 tree grid的右键菜单
    javascript innerHTML、outerHTML、innerText、outerText的区别
    EXT ajax简单实例
    C# 各版本更新简介
    C#与.Net Framework的各种版本和联系
    Ext4 简单的treepanel
    Ext4.1 Grid 分页查询
  • 原文地址:https://www.cnblogs.com/oneivan/p/2264981.html
Copyright © 2011-2022 走看看