博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
验证码
阅读量:5289 次
发布时间:2019-06-14

本文共 3697 字,大约阅读时间需要 12 分钟。

                                                                                                                                             
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.UI;using System.Web.UI.WebControls;using System.Drawing;public partial class Image : System.Web.UI.Page{    protected void Page_Load(object sender, EventArgs e)    {                     string str_ValidateCode = RndNum(4);            //  用于验证的Session                      Session["ValidateCode"] = str_ValidateCode;                  CreateImages(str_ValidateCode);     }    ///     /// 生成验证字符    ///     ///     private void CreateImages(string checkCode)    {        int iwidth = (int)(checkCode.Length  * 15);        System.Drawing.Bitmap image = new System.Drawing.Bitmap(iwidth, 23);        Graphics g = Graphics.FromImage(image);        g.Clear(Color.White);        //定义颜色        //Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple };        /,修改定义颜色数组个数,去掉橙色,        Color[] c = { Color.Black, Color.Red, Color.DarkBlue, Color.Green, Color.Brown, Color.DarkCyan, Color.Purple };        //定义字体         string[] font = {
"Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体"}; Random rand = new Random(); //随机输出噪点 for (int i = 0; i < 50; i++) { int x = rand.Next(image.Width); int y = rand.Next(image.Height); g.DrawRectangle(new Pen(Color.LightGray, 0), x, y, 1, 1); } //输出不同字体和颜色的验证码字符 for (int i = 0; i < checkCode.Length; i++) { int cindex = rand.Next(6);//小于7,输出的个数小于定义的字体数组个数 int findex = rand.Next(5);//小于5 Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//下标为5的字体,13 Brush b = new System.Drawing.SolidBrush(c[cindex]);//颜色为pruple int ii = 6; if ((i + 1) % 2 == 0) { ii = 4; } g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 16), ii);//字符串,文本样式,背景文理,x,y坐标 } //画一个边框 g.DrawRectangle(new Pen(Color.Black, 0), 0, 0, image.Width-1 , image.Height-1); //输出到浏览器 System.IO.MemoryStream ms = new System.IO.MemoryStream(); image.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); HttpContext.Current.Response.ClearContent(); //Response.ClearContent(); HttpContext.Current.Response.ContentType = "image/Jpeg"; HttpContext.Current.Response.BinaryWrite(ms.ToArray()); g.Dispose(); image.Dispose(); } /// /// 生成随机字符 /// /// 验证码的个数 ///
private string RndNum(int VcodeNum) { //string Vchar = "1,2,3,4,5,6,7,8,9"; string Vchar = "1"; //Vchar += ",a,b,c,d,e,f,g,h,i,j,k,l,m,n,p,q,r,s,t,u,v,w,x,y,z"; //Vchar += ",A,B,C,D,E,F,G,H,I,J,K,L,M,N,P,Q,R,S,T,U,V,W,X,Y,Z"; Vchar += ",i,j,l,r"; Vchar += ",I,J,L,R"; string[] VcArray = Vchar.Split(','); string VNum = ""; //由于字符串很短,就不用StringBuilder了 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(VcArray.Length); if (temp != -1 && temp == t) { return RndNum(VcodeNum); } temp = t; VNum += VcArray[t]; } return VNum; }}

 

转载于:https://www.cnblogs.com/Echo529/p/4332893.html

你可能感兴趣的文章
基础类型
查看>>
属性动画
查看>>
标识符
查看>>
Swift 常量&变量
查看>>
Sqli labs系列-less-4 这关好坑!!!
查看>>
路由跟踪工具0trace
查看>>
给大家分享一张CSS选择器优选级图谱 !
查看>>
Win7中不能调试windows service
查看>>
T-SQL触发器,限制一次只能删除一条数据
查看>>
boost库使用:vs2013下boost::container::vector编译出错解决
查看>>
通过httplib2 探索的学习的最佳方式
查看>>
理解运算符重载 4
查看>>
快来熟练使用 Mac 编程
查看>>
第二周
查看>>
断言简介
查看>>
Node.js 入门:Express + Mongoose 基础使用
查看>>
plsql使用,为什么可以能看见其他用户的表
查看>>
一步步教你轻松学奇异值分解SVD降维算法
查看>>
Scripting Java #3:Groovy与invokedynamic
查看>>
2014-04-21-阿里巴巴暑期实习-后台研发-二面经验
查看>>