xiaohu
人性化是滋养懒虫的温床,市场化才是培养精英的通道!

方法一:
<table>
<tr>
            <td align="right" class="cc">
                验证码:
            </td>
            <td>
                <img alt="" id="imgCode" style="cursor:pointer"  title="看不清楚,点我" onclick="this.src='imagecode.hr?'+Math.random()" src="imagecode.hr" />
            </td>
        </tr>
</table>

imagecode   页面后台方法:

protected void Page_Load(object sender, EventArgs e)
        {

            Response.Expires = 0;
            Response.CacheControl = "no-cache";

            string tmp = RndNum(4);

            Session.Add("Code", tmp);
            Session.Timeout = 30;
            this.ValidateCode(tmp);
        }
        private void ValidateCode(string VNum)
        {
            Bitmap Img = null;
            Graphics g = null;
            MemoryStream ms = null;
            int gheight = VNum.Length * 12;
            Img = new Bitmap(gheight, 24);
            g = Graphics.FromImage(Img);
            //背景颜色
            g.Clear(Color.Gray);
            //文字字体
            Font f = new Font("Arial", 10);
            //文字颜色
            SolidBrush s = new SolidBrush(Color.Black);
            g.DrawString(VNum, f, s, 3, 3);
            ms = new MemoryStream();
            Img.Save(ms, ImageFormat.Jpeg);
            Response.ClearContent();
            Response.ContentType = "images/Jpeg";
            Response.BinaryWrite(ms.ToArray());
            g.Dispose();
            Img.Dispose();
            Response.End();
        }
        private string RndNum(int VcodeNum)
        {
            string Vchar = "0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p" +
            ",q,r,s,t,u,v,w,x,y,z";
            string[] VcArray = Vchar.Split(new Char[] { ',' });//分割字符串
            string VNum = "";
            int temp = -1;
            Random rand = new Random();
            for (int i = 1; i < VcodeNum + 1; i++)
            {
                if (temp != -1)
                {
                    rand = new Random(i * temp * unchecked((int)DateTime.Now.Ticks));
                }
                int t = rand.Next(35);
                if (temp != -1 && temp == t)
                {
                    return RndNum(VcodeNum);
                }
                temp = t;
                VNum += VcArray[t];
            }
            return VNum;
        }

方法二:
<table>
<tr>
     <td bgcolor="#FFFFFF" align="right">验证码:</td>
     <td>
           <asp:TextBox ID="codes" MaxLength="4" runat="server" onkeyup="clearNoNum(this)"></asp:TextBox>
           <asp:Image ID="imgcode" runat="server" ImageUrl="~/codes.aspx" ImageAlign="Middle" />
           <a href="javascript:void();" onclick="imgcode.src='codes.aspx?codes='+Math.random()">刷新</a>
       </td>
</tr>
</table>
codes.aspx  页面 前台:
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </div>
    </form>
</body>
codes.aspx  页面 后台:

protected void Page_Load(object sender, EventArgs e)
        {
            this.CreateCheckCodeImage(GenerateCheckCode());
        }

        private void InitializeComponent()
        {
            this.Load += new System.EventHandler(this.Page_Load);
        }

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
        }

        private string GenerateCheckCode()
        {
            int number;
            char code;
            string checkCode = String.Empty;

            System.Random rad = new Random();

            for (int i = 0; i < 4; i++)
            {
                number = rad.Next();
                code = (char)('0' + (char)(number % 10));
                checkCode += code.ToString();
            }
            Session["VNum"] = checkCode;
            this.Label1.Text = checkCode;
            return checkCode;
        }

        private void CreateCheckCodeImage(string checkCode)
        {
            if (checkCode == null || checkCode.Trim() == String.Empty)
                return;

            System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
            System.Drawing.Graphics g = Graphics.FromImage(image);

            try
            {
                // 生成随机数
                Random rad = new Random();

                // 清空 图片背景
                g.Clear(Color.White);

                Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
                System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
                g.DrawString(checkCode, font, brush, 2, 2);

                //画图片的边框线
                g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);

                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
                Response.ClearContent();
                Response.ContentType = "image/Gif";
                Response.BinaryWrite(ms.ToArray());
            }
            finally {
                g.Dispose();
                image.Dispose();
            }
        }

posted on 2012-10-30 16:05  Jack Hu  阅读(448)  评论(1)    收藏  举报