快速业务通道

ASP.NET(C#) 生成随机验证码

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-04-12

源程序如下:

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Web;

/// <summary>
///
/// ** asp.net(C#) 生成验证码 **
///
/// File: GenerateCheckCode.cs
///
/// Author:ASP.NET学习网
///
///
/// www.17aspx.com
/
/// </summary>
public class GenerateCheckCode
{
    
private static string chkCode;

    
public static MemoryStream GenCheckCode()
    {
        
//颜色列表,用于验证码、噪线、噪点
        Color[] color ={ Color.Tomato, Color.OrangeRed, Color.Olive, Color.Gold, Color.GreenYellow,
                           Color.Blue, Color.LawnGreen, Color.Lime, Color.MediumSpringGreen, Color.Aqua, Color.RoyalBlue, Color.MediumBlue,
                           Color.BlueViolet, Color.MediumOrchid, Color.Fuchsia, Color.DeepPink, Color.HotPink };

        
//字体列表,用于验证码
        string[] font = { "Times New Roman", "MS Mincho", "Book Antiqua", "Gungsuh", "PMingLiU" };

        
//验证码的字符集,去掉了一些容易混淆的字符
        char[] character ={ ''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'' };
        Random rnd
= new Random();

        chkCode
= string.Empty;

        
//生成验证码字符串
        for (int i = 0; i < 4; i++)
        {
            chkCode
+= character[rnd.Next(character.Length)];
        }

        HttpContext.Current.Session[
"checkcode"] = chkCode;

        Bitmap bmp
= new Bitmap(100, 40);
        Graphics g
= Graphics.FromImage(bmp);

        g.Clear(Color.White);

        
//画噪线
        for (int i = 0; i < 10; i++)
        {
            
int x1 = rnd.Next(100);
            
int y1 = rnd.Next(40);
            
int x2 = rnd.Next(100);
            
int y2 = rnd.Next(40);
            Color clr
= color[rnd.Next(color.Length)];
            g.DrawLine(
new Pen(clr), x1, y1, x2, y2);
        }

        
//画验证码字符串
        for (int i = 0; i < chkCode.Length; i++)
        {
            
string fnt = font[rnd.Next(font.Length)];
            Font ft
= new Font(fnt, 18);
            Color clr
= color[rnd.Next(color.Length)];
            g.DrawString(chkCode[i].ToString(), ft,
new SolidBrush(clr), (float)i * 20 + 8, (float)8);
        }

        
//画噪点
        for (int i = 0; i < 100; i++)
        {
            
int x = rnd.Next(bmp.Width);
            
int y = rnd.Next(bmp.Height);
            Color clr
= color[rnd.Next(color.Length)];
            bmp.SetPixel(x, y, clr);
        }

        
//画边框
        Color col = color[rnd.Next(color.Length)];
        g.DrawLine(
new Pen(color[rnd.Next(color.Length)]), 0, 0, bmp.Width - 1, 0);
        g.DrawLine(
new Pen(color[rnd.Next(color.Length)]), 0, 0, 0, bmp.Height - 1);
        g.DrawLine(
new Pen(color[rnd.Next(color.Length)]), bmp.Width - 1, 0, bmp.Width - 1, bmp.Height - 1);
        g.DrawLine(
new Pen(color[rnd.Next(color.Length)]), 0, bmp.Height - 1, bmp.Width - 1, bmp.Height - 1);

        
//清除该页输出缓存,设置该页无缓存
        HttpContext.Current.Response.Buffer = true;
        HttpContext.Current.Response.ExpiresAbsolute
= System.DateTime.Now.AddMilliseconds(0);
        HttpContext.Current.Response.Expires
= 0;
        HttpContext.Current.Response.CacheControl
= "no-cache";
        HttpContext.Current.Response.AddHeader(
"Pragma", "No-Cache");
        HttpContext.Current.Response.Cache.SetCacheability(HttpCacheability.NoCache);

        
//将验证码图片写入内存流,并将其以 "image/Png" 格式输出
        MemoryStream ms = new MemoryStream();

        
try
        {
            bmp.Save(ms, ImageFormat.Png);
            HttpContext.Current.Response.ClearContent();
            HttpContext.Current.Response.ContentType
= "image/Png";
            
return ms;
        }
        
catch (Exception)
        {
            
return null;
        }
        
finally
        {
            
//显式释放资源
            bmp.Dispose();
            g.Dispose();
        }
    }
}

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号