• 由数字与字母组成的验证码的实现


    一、软件中使用验证码的作用

      现在软件中的很多地方有用到验证码,比如注册账号、登录的时候等等。验证码的使用是为了防止“爆破”既暴力破解,那什么是暴力破解呢,暴力破解就是利用程序,按照一定的规律往表单中输入数据,逐个测试。验证码 是随机产生的同时它不仅仅是单纯的图片或数字,只有输入的验证码正确之后才会去后台数据库做验证,从而防止暴力破解。

    二、示例讲解

      创建一个ASP.NET程序,单独添加一个Web页面用于生成验证码,相关代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Drawing;
    using System.IO;
    using System.Drawing.Imaging;
    
    namespace UI
    {
        public partial class ValidateCodeCopy : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if(!IsPostBack)
                {
                    //生成一个四位的随机码
                    string validateCode = RndNum(4);
                    //将随机码保存到session中
                    Session["ValidateCode"] = validateCode;
                    CreateImage(validateCode);
                
                }
    
                
            }
    
            /// <summary>
            /// 生成一个随机码
            /// </summary>
            /// <param name="VCodeNum">随机码的位数</param>
            /// <returns></returns>
            public string RndNum(int VCodeNum )
            {
                string VNUM = "";
    
                string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
    
                String[] VcArray = Vchar.Split(new char[]{','});
    
                Random rd = new Random();
    
                for (int i = 0; i <= VCodeNum - 1;i++)
                {
                    int t = rd.Next(36);
                    VNUM += VcArray[t];
                }
                return VNUM;
            
            }
    
    
            /// <summary>
            /// 生成随机颜色
            /// </summary>
            /// <returns></returns>
            public Color GetRandomColor()
            {
                Random Rd_First = new Random((int)DateTime.Now.Ticks);
    
                Random Rd_Second = new Random((int)DateTime.Now.Ticks);
                //生成三个随机数
                int red = Rd_First.Next(256);
                int Green = Rd_Second.Next(256);
                int blue = (red + Green) > 400 ? 0 : 400 - red + Green;
                blue = blue > 255 ? 255 : blue;
    
                return Color.FromArgb(red,Green, blue);
            
            }
            /// <summary>
            /// 将随机码绘制到图像,写入输出流
            /// </summary>
            /// <param name="str_ValidateCode">随机码</param>
            public void CreateImage(string str_ValidateCode)
            {
                int int_imageWidth = str_ValidateCode.Length * 20;
                Bitmap thebitmap = new Bitmap(int_imageWidth,40);
    
                Random rd = new Random();
                Graphics Gr = Graphics.FromImage(thebitmap);
                Gr.Clear(Color.White);
    
                Gr.DrawRectangle(new Pen(Color.LightGray, 1),0,0,int_imageWidth-1,39);
    
                Font font = new Font("Arial",16);
    
                for (int int_index = 0; int_index < str_ValidateCode.Length;int_index++ )
                {
                    string str_char = str_ValidateCode.Substring(int_index,1);
    
                    Brush newBrush = new SolidBrush(GetRandomColor());
    
                    Point thePos = new Point(int_index * 20 + 1 + rd.Next(3), 3+ rd.Next(3));
                    Gr.DrawString(str_char, font, newBrush, thePos);
                }
    
                MemoryStream ms = new MemoryStream();
                thebitmap.Save(ms, ImageFormat.Jpeg);
                Response.ClearContent();
                Response.ContentType = "image/jpeg";
                Response.BinaryWrite(ms.ToArray());
    
                Gr.Dispose();
                thebitmap.Dispose();
                Response.End();
            
            
            }
    
    
        }
    }

    另外添加一张web页面 用于获取验证码,其前端HTML代码如下:

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="UI.Test" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
    </head>
    <body>
        <form id="form1" runat="server">
    
        <table>
            <tr>
                <td><img src="ValidateCodeCopy.aspx" name="yzm" id="yzm"  alt="" /></td>
                <td><a href="#" onclick="yzm.src='ValidateCodeCopy.aspx?t='+(new Date().getTime());return false;">看不清,换一张?</a></td>
            </tr>
        </table>
                
        
        
        </form>
    </body>
    </html>

    这样一个简单的验证码就实现了。

                                                                                                                           不积跬步无以至千里

     

     

  • 相关阅读:
    解决UITableView中Cell重用机制导致内容出错的方法总结
    Hdu 1052 Tian Ji -- The Horse Racing
    Hdu 1009 FatMouse' Trade
    hdu 2037 今年暑假不AC
    hdu 1559 最大子矩阵
    hdu 1004 Let the Balloon Rise
    Hdu 1214 圆桌会议
    Hdu 1081 To The Max
    Hdu 2845 Beans
    Hdu 2955 Robberies 0/1背包
  • 原文地址:https://www.cnblogs.com/YanYongSong/p/4959286.html
Copyright © 2020-2023  润新知