zoukankan      html  css  js  c++  java
  • 由数字与字母组成的验证码的实现

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

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

    二、示例讲解

      创建一个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>

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

                                                                                                                           不积跬步无以至千里

     

     

  • 相关阅读:
    solr总结
    jeesite
    Freemarker模板的使用简介
    Sd
    Sd
    Sd
    Standard Java集合类问题待整理
    Standard
    Linux并发服务器设计
    Java 生产者消费者 & 例题
  • 原文地址:https://www.cnblogs.com/YanYongSong/p/4959286.html
Copyright © 2011-2022 走看看