现在的位置: 首页 > 综合 > 正文

小玩随机验证码

2013年08月23日 ⁄ 综合 ⁄ 共 2539字 ⁄ 字号 评论关闭

我们先来看两张图片,相信大家一定不陌生:

第一张:


这张是12306 预定车票的登录界面,在输入用户名和密码后,还有输入正确的验证码才能够登录到预定车票界面!

第二张:


这一张是小米用户的注册的界面,在申请账户时,要输入正确的验证码才能够注册成功.

这样验证码每一次出来都是不一样的,感觉挺好玩的,那么我们就已C#语言为例子,来看看这么验证码的真实面目:

第一步:建立一般处理程序:


第二步:在一般处理程序中写入随机验证的代码:

引用的命名空间:

using System;
using System.Web;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Web.SessionState; 


随机生成的验证码:

public void ProcessRequest(HttpContext context)
    {
        string checkCode = GenCode(5);  // 产生5位随机字符
        context.Session["Code"] = checkCode; //将字符串保存到Session中,以便需要时进行验证
        System.Drawing.Bitmap image = new System.Drawing.Bitmap(70, 22);
        Graphics g = Graphics.FromImage(image);
        try
        {
            //生成随机生成器
            Random random = new Random();

            //清空图片背景色
            g.Clear(Color.White);

            // 画图片的背景噪音线
            int i;
            for (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.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);

            //画图片的前景噪音点
            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);
            context.Response.ClearContent();
            context.Response.ContentType = "image/Gif";
            context.Response.BinaryWrite(ms.ToArray());
        }
        finally
        {
            g.Dispose();
            image.Dispose();
        }
    }

    /// <summary>
    /// 产生随机字符串
    /// </summary>
    /// <param name="num">随机出几个字符</param>
    /// <returns>随机出的字符串</returns>
    private string GenCode(int num)
    {
        string str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        char[] chastr = str.ToCharArray();
       
        string code = "";
        Random rd = new Random();
        int i;
        for (i = 0; i < num; i++)
        {
            
            code += str.Substring(rd.Next(0, str.Length), 1);
        }
        return code;

    }


HTML:使用验证码的时候使用了javascript控件,进行脚本的隐藏.还有了验证控件验证输入的验证码是否正确!

<script language ="javascript" " type="text/javascript">
    <!--点击图片更换验证码-->
    function changeCode() { var imgNode = document.getElementById("vimg"); imgNode.src
    = "../handler/watermark.ashx?t=" + (new Date()).valueOf(); // 这里加个时间的参数是为了防止浏览器缓存的问题
    } </script>


验证码:
                <img src="../handler/watermark.ashx" id="vimg" alt="" />
                <!--添加毛记-->
                <asp:TextBox ID="txtcode" runat="server" CssClass="textcode"></asp:TextBox>
                <asp:RequiredFieldValidator ID="RequiredFieldValidator3" runat="server" ErrorMessage="请输入验证码"
                    Text="*" ControlToValidate="txtcode"></asp:RequiredFieldValidator>


代码:获取输入的验证码和存放在缓存文件Sssion中的随机验证码,用两个来比较,如果是一样的,那么验证码输入成功.

   //判断验证码是否输入正确
        string code = txtcode.Text.Trim().ToUpper();
        string rightCode = Session["Code"].ToString();

抱歉!评论已关闭.