using System;
using System.Drawing;

namespace UUN
{
    public struct 验证码参数
    {
        public int 图片宽度;
        public int 图片高度;

        public int 左坐标;
        public int 上坐标;

        public Color 文字颜色;
        public Color 背景颜色;

        public int 文字大小;

        public int 杂点数;

        public 验证码参数(int 左坐标, int 上坐标)
        {
            this.图片宽度 = 50;
            this.图片高度 = 20;

            this.左坐标 = 左坐标;
            this.上坐标 = 上坐标;

            this.文字颜色 = Color.FromArgb(0, 0, 0);
            this.背景颜色 = Color.FromArgb(255, 255, 255);

            this.文字大小 = 12;

            this.杂点数 = 40;
        }
    }
    /// <summary>
    /// 生成安全验证的识别码
    /// </summary>
    public class 验证码
    {
        public 验证码参数 验证码参数;

        public String 随机字符;

        public 验证码(验证码参数 验证码参数)
        {
            this.验证码参数 = 验证码参数;
        }
        public Image 生成(int 字符数量)
        {
            //生成字符串
            String 随机字符 = 常用.随机字符(字符数量);
            
            //创建对象
            Bitmap BMP = new Bitmap(验证码参数.图片宽度, 验证码参数.图片高度);
            Graphics G = Graphics.FromImage(BMP);

            //绘制背景
            G.FillRectangle(new SolidBrush(验证码参数.背景颜色), 0, 0, 验证码参数.图片宽度, 验证码参数.图片高度);

            //绘制文字
            G.DrawString(随机字符, new Font("宋体", 验证码参数.文字大小,FontStyle.Bold), new SolidBrush(验证码参数.文字颜色), 验证码参数.左坐标, 验证码参数.上坐标);

            //绘制杂点
            for (int i = 0; i < 验证码参数.杂点数; i++)
            {
                int 左坐标 = 常用.随机数(验证码参数.图片宽度);
                int 上坐标 = 常用.随机数(验证码参数.图片高度);
                G.DrawLine(new Pen(验证码参数.文字颜色),
                    左坐标,
                    上坐标,
                    左坐标+1,
                    上坐标);
            }

            //生成并返回
            G.Dispose();
            this.随机字符 = 随机字符;
            return BMP;
        }
    }
}