惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

TaoSecurity Blog
TaoSecurity Blog
Jina AI
Jina AI
雷峰网
雷峰网
月光博客
月光博客
The GitHub Blog
The GitHub Blog
WordPress大学
WordPress大学
B
Blog RSS Feed
美团技术团队
C
CXSECURITY Database RSS Feed - CXSecurity.com
小众软件
小众软件
Security Latest
Security Latest
Microsoft Azure Blog
Microsoft Azure Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cybersecurity and Infrastructure Security Agency CISA
Last Week in AI
Last Week in AI
A
Arctic Wolf
Latest news
Latest news
Attack and Defense Labs
Attack and Defense Labs
I
Intezer
F
Fortinet All Blogs
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
Webroot Blog
Webroot Blog
S
Secure Thoughts
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
V
Visual Studio Blog
P
Proofpoint News Feed
博客园 - 【当耐特】
P
Privacy International News Feed
V
Vulnerabilities – Threatpost
Stack Overflow Blog
Stack Overflow Blog
Know Your Adversary
Know Your Adversary
云风的 BLOG
云风的 BLOG
Hacker News: Ask HN
Hacker News: Ask HN
L
LINUX DO - 最新话题
H
Help Net Security
爱范儿
爱范儿
酷 壳 – CoolShell
酷 壳 – CoolShell
S
SegmentFault 最新的问题
Forbes - Security
Forbes - Security
T
Tailwind CSS Blog
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tenable Blog
Cloudbric
Cloudbric
N
News and Events Feed by Topic
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Hugging Face - Blog
Hugging Face - Blog

博客园 - 婕舞飞扬

北京燃气集团 一个女软件工程师的征婚启示(淡淡的感人) 丹东思凯公司承担的吉林水务集团同城联网及银行代缴平台系统项目正式运行 万事随缘,不可强求! 新能源 我的座右铭 吉林同城联网系统 休闲以下 Computer操作技巧之IIS篇 net通过oledb 和ibm自带连接方式,连接db2数据库出错 - 婕舞飞扬 - 博客园 ADO.NET连接数据库字符串 - 婕舞飞扬 - 博客园 vs2005调试问题及解决方案锦集 拉大锯,扯大锯,姥家门口唱大戏 如何解决 SQL Server 2000 中的连接问题 了解.NET Micro Framework技术 如何将数据导入到 SQL Server Compact Edition 数据库中(四) 如何将数据导入到 SQL Server Compact Edition 数据库中(三) 如何将数据导入到 SQL Server Compact Edition 数据库中(二) 如何将数据导入到 SQL Server Compact Edition 数据库中(一)
ASP.NET中文彩色验证码实现
婕舞飞扬 · 2008-05-02 · via 博客园 - 婕舞飞扬

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Drawing;
using System.Text;

/// <summary>
/// VryImgGen 的摘要说明
/// 我的BLOG: http://xudongyh.cnblogs.com
/// 个人网站: http://www.wangxudong.com
/// </summary>

public class VryImgGen
{
    
public static string ChineseChars = String.Empty;

    
/// <summary>
    
/// 英文与数字串
    
/// </summary>

    protected static readonly string EnglishOrNumChars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

    
public VryImgGen()
    
{
        rnd 
= new Random(unchecked((int)DateTime.Now.Ticks));
    }

//该源码下载自www.51aspx.com(51aspx.com)

    
/// <summary>
    
/// 全局随机数生成器
    
/// </summary>

    private Random rnd;

    
int length = 5;
    
/// <summary>
    
/// 验证码长度(默认6个验证码的长度)
    
/// </summary>

    public int Length
    
{
        
get return length; }
        
set { length = value; }
    }


    
int fontSize = 18;
    
/// <summary>
    
/// 验证码字体大小(为了显示扭曲效果,默认30像素,可以自行修改)
    
/// </summary>

    public int FontSize
    
{
        
get return fontSize; }
        
set { fontSize = value; }
    }


    
int padding = 4;
    
/// <summary>
    
/// 边框补(默认4像素)
    
/// </summary>

    public int Padding
    
{
        
get return padding; }
        
set { padding = value; }
    }


    
bool chaos = true;
    
/// <summary>
    
/// 是否输出燥点(默认输出)
    
/// </summary>

    public bool Chaos
    
{
        
get return chaos; }
        
set { chaos = value; }
    }


    Color chaosColor 
= Color.LightGray;
    
/// <summary>
    
/// 输出燥点的颜色(默认灰色)
    
/// </summary>

    public Color ChaosColor
    
{
        
get return chaosColor; }
        
set { chaosColor = value; }
    }


    Color backgroundColor 
= Color.White;
    
/// <summary>
    
/// 自定义背景色(默认白色)
    
/// </summary>

    public Color BackgroundColor
    
{
        
get return backgroundColor; }
        
set { backgroundColor = value; }
    }


    Color[] colors 
= { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };
    
/// <summary>
    
/// 自定义随机颜色数组
    
/// </summary>

    public Color[] Colors
    
{
        
get return colors; }
        
set { colors = value; }
    }


    
string[] fonts = "Arial""Georgia" };
    
/// <summary>
    
/// 自定义字体数组
    
/// </summary>

    public string[] Fonts
    
{
        
get return fonts; }
        
set { fonts = value; }
    }


    
产生波形滤镜效果

    
/// <summary>
    
/// 生成校验码图片
    
/// </summary>
    
/// <param name="code">验证码</param>
    
/// <returns></returns>

    public Bitmap CreateImage(string code)
    
{
        
int fSize = FontSize;
        
int fWidth = fSize + Padding;

        
int imageWidth = (int)(code.Length * fWidth) + 4 + Padding * 2;
        
int imageHeight = fSize * 2 + Padding * 2;

        System.Drawing.Bitmap image 
= new System.Drawing.Bitmap(imageWidth, imageHeight);

        Graphics g 
= Graphics.FromImage(image);

        g.Clear(BackgroundColor);

        
//给背景添加随机生成的燥点
        if (this.Chaos)
        
{

            Pen pen 
= new Pen(ChaosColor, 0);
            
int c = Length * 10;

            
for (int i = 0; i < c; i++)
            
{
                
int x = rnd.Next(image.Width);
                
int y = rnd.Next(image.Height);

                g.DrawRectangle(pen, x, y, 
11);
            }

        }


        
int left = 0, top = 0, top1 = 1, top2 = 1;

        
int n1 = (imageHeight - FontSize - Padding * 2);
        
int n2 = n1 / 4;
        top1 
= n2;
        top2 
= n2 * 2;

        Font f;
        Brush b;

        
int cindex, findex;

        
//随机字体和颜色的验证码字符
        for (int i = 0; i < code.Length; i++)
        
{
            cindex 
= rnd.Next(Colors.Length - 1);
            findex 
= rnd.Next(Fonts.Length - 1);

            f 
= new System.Drawing.Font(Fonts[findex], fSize, System.Drawing.FontStyle.Bold);
            b 
= new System.Drawing.SolidBrush(Colors[cindex]);

            
if (i % 2 == 1)
            
{
                top 
= top2;
            }

            
else
            
{
                top 
= top1;
            }


            left 
= i * fWidth;

            g.DrawString(code.Substring(i, 
1), f, b, left, top);
        }


        
//画一个边框 边框颜色为Color.Gainsboro
        g.DrawRectangle(new Pen(Color.Gainsboro, 0), 00, image.Width - 1, image.Height - 1);
        g.Dispose();

        
//产生波形(Add By 51aspx.com)
        image = TwistImage(image, true84);

        
return image;
    }


    
/// <summary>
    
/// 生成随机字符码
    
/// </summary>
    
/// <param name="codeLen">字符串长度</param>
    
/// <param name="zhCharsCount">中文字符数</param>
    
/// <returns></returns>

    public string CreateVerifyCode(int codeLen, int zhCharsCount)
    
{
        
char[] chs = new char[codeLen];

        
int index;
        
for (int i = 0; i < zhCharsCount; i++)
        
{
            index 
= rnd.Next(0, codeLen);
            
if (chs[index] == '\0')
                chs[index] 
= CreateZhChar();
            
else
                
--i;
        }

        
for (int i = 0; i < codeLen; i++)
        
{
            
if (chs[i] == '\0')
                chs[i] 
= CreateEnOrNumChar();
        }


        
return new string(chs, 0, chs.Length);
    }


    
/// <summary>
    
/// 生成默认长度5的随机字符码
    
/// </summary>
    
/// <returns></returns>

    public string CreateVerifyCode()
    
{
        
return CreateVerifyCode(Length, 0);
    }


    
/// <summary>
    
/// 生成英文或数字字符
    
/// </summary>
    
/// <returns></returns>

    protected char CreateEnOrNumChar()
    
{
        
return EnglishOrNumChars[rnd.Next(0, EnglishOrNumChars.Length)];
    }


    
/// <summary>
    
/// 生成汉字字符
    
/// </summary>
    
/// <returns></returns>

    protected char CreateZhChar()
    
{
        
//若提供了汉字集,查询汉字集选取汉字
        if (ChineseChars.Length > 0)
        
{
            
return ChineseChars[rnd.Next(0, ChineseChars.Length)];
        }

        
//若没有提供汉字集,则根据《GB2312简体中文编码表》编码规则构造汉字
        else
        
{
            
byte[] bytes = new byte[2];

            
//第一个字节值在0xb0, 0xf7之间
            bytes[0= (byte)rnd.Next(0xb00xf8);
            
//第二个字节值在0xa1, 0xfe之间
            bytes[1= (byte)rnd.Next(0xa10xff);

            
//根据汉字编码的字节数组解码出中文汉字
            string str1 = Encoding.GetEncoding("gb2312").GetString(bytes);

            
return str1[0];
        }

    }


}