验证码类

做项目,重新封装了一个验证码的类,难度不大,可以设置验证码框的宽度和高度,设定背景色,设定字母或是数字,或是混合的,设定验证码是否有边框,设定验证码个数等.有兴趣的朋友还可以增加中文的验证码等,修改请保留原始注释.有问题或有更好的方法请指正,欢迎探讨,谢谢.

 

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.Drawing;
using System.IO;
using System.Text;
using System.Web.UI;

namespace FXOA.Utility.ManageUtility
ExpandedBlockStart.gifContractedBlock.gif
{
ExpandedSubBlockStart.gifContractedSubBlock.gif    
/**//// <summary>
    
/// 作用:验证码生成
    
/// 创建人:王坤 2009.01.15
    
/// </summary>

    public class ValidateCode
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
ContractedSubBlock.gifExpandedSubBlockStart.gif        
私有变量属性#region 私有变量属性
        
ExpandedSubBlockStart.gifContractedSubBlock.gif        
public enum CharacterType { Letter, Number, Admixture, Chinese}

        
private int _codelength = 5;
        
private Color _backgroudcolor = Color.White;
        
private int _bmpwidth = 100;
        
private int _bmpheigth = 25;
        
private bool _border = false;
        
private CharacterType _chartype = CharacterType.Admixture;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
private string[] _admixturechar = "2""3""4""5""6""8""9"
                                    
"A""B""C""D""E""F""G""H""J""K"
                                    
"L""M""N""P""R""S""T""W""X""Y",
                                    
"a""b""c""d""e""f""g""h""j""k"
                                    
"l""m""n""p""r""s""t""w""x""y" }
;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
private string[] _letterchar = {"A""B""C""D""E""F""G""H""J""K"
                                    
"L""M""N""P""R""S""T""W""X""Y",
                                    
"a""b""c""d""e""f""g""h""j""k"
                                    
"l""m""n""p""r""s""t""w""x""y" }
;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
private string[] _numberchar = {"1""2""3""4""5""6""8""9""0" };
       
// private string _chinesechar = "的一是在不了有和人这中大为上个国我以要他时来用们生到作地于出就分对成会可主发年动同工也能下过子说产种面而方后多定行学法所民得经十三之进着等部度家电力里如水化高自二理起小物现实加量都两体制机当使点从业本去把性好应开它合还因由其些然前外天政四日那社义事平形相全表间样与关各重新线内数正心反你明看原又么利比或但质气第向道命此变条只没结解问意建月公无系军很情者最立代想已通并提直题党程展五果料象员革位入常文总次品式活设及管特件长求老头基资边流路级少图山统接知较将组见计别她手角期根论运农指几九区强放决西被干做必战先回则任取据处队南给色光门即保治北造百规热领七海口东导器压志世金增争济阶油思术极交受联什认六共权收证改清己美再采转更单风切打白教速花带安场身车例真务具万每目至达走积示议声报斗完类八离华名确才科张信马节话米整空元况今集温传土许步群广石记需段研界拉林律叫且究观越织装影算低持音众书布复容儿须际商非验连断深难近矿千周委素技备半办青省列习响约支般史感劳便团往酸历市克何除消构府称太准精值号率族维划选标写存候毛亲快效斯院查江型眼王按格养易置派层片始却专状育厂京识适属圆包火住调满县局照参红细引听该铁价严";
ExpandedSubBlockStart.gifContractedSubBlock.gif
        private Color[] _colors = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, 
                                    Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple }
;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
private string[] _fonts = "Times New Roman""MS Mincho""Book Antiqua""Gungsuh"
                                    
"Arial""Georgia""PMingLiU""Impact" }
;
ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 随机码长度(默认值为5)
        
/// </summary>

        public int CodeLength
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._codelength; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._codelength = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// Graphics背景色(默认为白色)
        
/// </summary>

        public Color BackGroudColor
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._backgroudcolor; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._backgroudcolor = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 随机码图片宽度(默认值100)
        
/// </summary>

        public int BmpWidth
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._bmpwidth; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._bmpwidth = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 随机码图片高度(默认值25)
        
/// </summary>

        public int BmpHeigth
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._bmpheigth; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._bmpheigth = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 是否画边框(默认值false)
        
/// </summary>

        public bool Border
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._border; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._border = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 字符集(默认值是字幕和数字混合体)
        
/// </summary>

        public CharacterType CharType
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._chartype; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._chartype = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 混合随机字符
        
/// </summary>

        private string[] AdmixtureChar
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._admixturechar; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._letterchar = value;}
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 字母随机字符
        
/// </summary>

        private string[] LetterChar
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._letterchar; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._letterchar = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 数字随机字符
        
/// </summary>

        private string[] NumberChar
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._numberchar; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._numberchar = value; }
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 随机颜色
        
/// </summary>

        private Color[] Colors
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._colors; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._colors = value; }    
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 随机字体
        
/// </summary>

        private string[] Fonts
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
ExpandedSubBlockStart.gifContractedSubBlock.gif            
get return this._fonts; }
ExpandedSubBlockStart.gifContractedSubBlock.gif            
set this._fonts = value; }
        }


        
#endregion


ContractedSubBlock.gifExpandedSubBlockStart.gif        
构造函数#region  构造函数

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 构造函数
        
/// </summary>

ExpandedSubBlockStart.gifContractedSubBlock.gif        public ValidateCode() { }

        
#endregion


ContractedSubBlock.gifExpandedSubBlockStart.gif        
验证码方法函数#region 验证码方法函数

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 创建随机码
        
/// </summary>
        
/// <returns>string</returns>

        public string CreateCode()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            
string CodeNumber = string.Empty;
            Random rdm 
= new Random();
            
for (int i = 0; i < CodeLength; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
//判断字符集
                switch (CharType)
ExpandedSubBlockStart.gifContractedSubBlock.gif                
{
                    
case CharacterType.Admixture:
                        CodeNumber 
+= AdmixtureChar[rdm.Next(AdmixtureChar.Length)];
                        
break;
                    
case CharacterType.Letter:
                        CodeNumber 
+= LetterChar[rdm.Next(LetterChar.Length)];
                        
break;
                    
case CharacterType.Number:
                        CodeNumber 
+= NumberChar[rdm.Next(NumberChar.Length)];
                        
break;
                }

            }

            
return CodeNumber;
        }

ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 创建随机码输出
        
/// </summary>
        
/// <param name="codeNumber">动态随机码</param>
        
/// <param name="page">当前页面</param>

        public void CreateValidateCode(string codeNumber, Page page)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            MemoryStream ms 
= new MemoryStream();
            Bitmap bmpImage 
= CreateImage(codeNumber);
            
try
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                bmpImage.Save(ms, ImageFormat.Jpeg);
                page.Response.ClearContent();
                page.Response.ContentType 
= "image/Jpeg";
                page.Response.BinaryWrite(ms.GetBuffer());
            }

            
catch
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                ms.Dispose();
                bmpImage.Dispose();
            }

        }


ExpandedSubBlockStart.gifContractedSubBlock.gif        
/**//// <summary>
        
/// 创建随机码图片(私有函数)
        
/// </summary>
        
/// <param name="codeNumber">动态随机码</param>
        
/// <returns>Bitmap</returns>

        private Bitmap CreateImage(string codeNumber)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            Bitmap bmp 
= new Bitmap(BmpWidth, BmpHeigth);
            Graphics grh 
= Graphics.FromImage(bmp);
            Random rdm 
= new Random();
            grh.Clear(BackGroudColor);     
            Color penColor 
= Colors[rdm.Next(Colors.Length)];  //随机产生颜色
            Pen pen = new Pen(penColor);
                   
            
for (int i = 0; i < CodeLength*5; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
int x = rdm.Next(bmp.Width);
                
int y = rdm.Next(bmp.Height);
                grh.DrawRectangle(pen, x, y, 
11);   //画一个矩形方框
            }


            
for (int i = 0; i < CodeLength; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif            
{
                
int sWidth = i*(BmpWidth / CodeLength) + 1;   //根据宽度和长度设定随机码在画板中的显示位置
                int sHeigth = BmpHeigth / 2 - 10;
                Brush brh 
= new SolidBrush(Colors[rdm.Next(Colors.Length)]);
                Font fnt 
= new Font(Fonts[rdm.Next(Fonts.Length)], 15, FontStyle.Bold);
                grh.DrawString(codeNumber[i].ToString(), fnt, brh, sWidth, sHeigth);  
            }

            
if (Border)  //是否有边框
ExpandedSubBlockStart.gifContractedSubBlock.gif
            {
                grh.DrawRectangle(pen, 
00, bmp.Width - 1, bmp.Height - 1); //为随机码添加一个边框
            }

            grh.Dispose();
            
return bmp;
        }


        
#endregion
 
    }

}

 

 

使用方法:新建一个验证码页面vaildatecode.aspx

 

ContractedBlock.gif ExpandedBlockStart.gif Code
using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using FXOA.Utility.ManageUtility;

public partial class ManageUI_ValidateCode : System.Web.UI.Page
ExpandedBlockStart.gifContractedBlock.gif
{
    
protected void Page_Load(object sender, EventArgs e)
ExpandedSubBlockStart.gifContractedSubBlock.gif    
{
        
if (!IsPostBack)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
{
            ValidateCode vc 
= new ValidateCode();
            
string validateCode = vc.CreateCode();  
            Session[
"Code"= validateCode.Trim().ToUpper();//将所有字母转换为大写
            vc.CreateValidateCode(validateCode, this.Page);
        }

    }

}

 

调用页面加上

 

ContractedBlock.gif ExpandedBlockStart.gif Code
                                        <span>
                                            
<img runat="server" id="imgcode" src="~/validatecode.aspx" alt="验证码看不清楚,请重新获取" /></span>
                                        
<span><style="cursor: pointer; vertical-align: top" title="重新获取(字母不区分大小写)" onclick="document.getElementById('imgcode').src='validatecode.aspx?' + Math.random()">
                                            重新获取
</a></span>

 


 

转载于:https://www.cnblogs.com/frankie_24/archive/2009/01/16/1376800.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值