zoukankan      html  css  js  c++  java
  • C#产生随机验证码的代码

    今天看到一个源码,里面有产生验证码的代码。于是反编译了一下。

    现在将他的代码贴出来。(我改了一点点,以及打了部分注释)

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Text;
    using System.Drawing.Drawing2D;
    using System.Drawing;
    using System.IO;
    using System.Drawing.Imaging;
    
    public partial class ValidateCode : System.Web.UI.Page
    {
        private string code;
        private const int ImageHeigth = 22;             //验证码图片的高度
        private const double ImageLengthBase = 12.5;    //验证码图片中每个字符的宽度
        private const int ImageLineNumber = 25;         //噪音线的数量
        private const int ImagePointNumber = 100;       //噪点的数量
        private int length;
        public static string VALIDATECODEKEY;       //此处用来保存验证码到Session的Key的名称
    
        //静态构造函数初始化验证码在Session中的Key名称
        static ValidateCode()
        {
            VALIDATECODEKEY = "VALIDATECODEKEY";
        }
    
        //设置验证码的长度和内容
        public ValidateCode()
        {
            this.length = 4;
            this.code = string.Empty;
        }
    
        /// <summary>
        /// 产生随机的验证码并加入Session
        /// </summary>
        /// <param name="length">验证码长度</param>
        /// <returns></returns>
        public string CreateCode(int length)
        {
            if (length <= 0)
            {
                return string.Empty;
            }
            Random random = new Random();
            StringBuilder builder = new StringBuilder();
            //产生随机的验证码并拼接起来
            for (int i = 0; i < length; i++)
            {
                builder.Append(random.Next(0, 10));
            }
            this.code = builder.ToString();
            this.Session[VALIDATECODEKEY] = this.code;
            return this.code;
        }
    
        /// <summary>
        /// 根据长度产生验证码
        /// 并将验证码画成图片
        /// </summary>
        /// <param name="length">验证码长度</param>
        public void CreateValidateImage(int length) 
        {
            this.code = this.CreateCode(length);
            this.CreateValidateImage(this.code);
        }
        /// <summary>
        /// 根据产生的验证码生成图片
        /// </summary>
        /// <param name="code">验证码</param>
        public void CreateValidateImage(string code) 
        {
            if (!string.IsNullOrEmpty(code))
            {
                this.Session[VALIDATECODEKEY] = code;
                //初始化位图Bitmap对象,指定图片对象的大小(宽,高)
                Bitmap image = new Bitmap((int)Math.Ceiling((double)(code.Length * ImageLengthBase)), ImageHeigth);
                //初始化一块画布
                Graphics graphics = Graphics.FromImage(image);
                Random random = new Random();
                try
                {
                    int num5;
                    graphics.Clear(Color.White);
                    //绘制噪音线
                    for (num5 = 0; num5 < ImageLineNumber; num5++)
                    {
                        int num = random.Next(image.Width);
                        int num3 = random.Next(image.Height);
                        int num2 = random.Next(image.Width);
                        int num4 = random.Next(image.Height);
                        graphics.DrawLine(new Pen(Color.Silver), num, num3, num2, num4);
                    }
                    //验证码字体样式
                    Font font = new Font("Tahoma", 12, FontStyle.Italic | FontStyle.Bold);
                    LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
                    //绘制验证码到画布
                    graphics.DrawString(code, font, brush, (float)2, (float)2);
                    //绘制噪点
                    for (num5 = 0; num5 < ImagePointNumber; num5++)
                    {
                        int x = random.Next(image.Width);
                        int y = random.Next(image.Height);
                        image.SetPixel(x, y, Color.FromArgb(random.Next()));
                    }
                    graphics.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
                    MemoryStream stream = new MemoryStream();
                    //保存图片
                    image.Save(stream, ImageFormat.Gif);
                    base.Response.ClearContent();
                    base.Response.ContentType = "image/Gif";
                    base.Response.BinaryWrite(stream.ToArray());
                }
                finally
                {
                    graphics.Dispose();
                    image.Dispose();
                }
            }
        }
        protected override void OnLoad(EventArgs e) 
        {
            this.CreateValidateImage(this.length);
        }
    
        // Properties
        public string Code
        {
            get
            {
                return this.Code;
            }
        }
        public int Length
        {
            get
            {
                return this.length;
            }
            set
            {
                this.length = value;
            }
        }
    }
    

    再次申明非本人原创。可以到网上下载ASPNETAJAXWeb.ValidateCode.dll直接使用

  • 相关阅读:
    【java】对象赋值给另一个对象
    spring boot系列(五)spring boot 配置spring data jpa (查询方法)
    Spring Data JPA 查询
    Spring Data JPA 介绍
    OpenID简介
    OAUTH协议介绍
    URL encoding(URL编码)
    RESTful 介绍
    spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
    spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  • 原文地址:https://www.cnblogs.com/ranlin/p/2145496.html
Copyright © 2011-2022 走看看