Aspx 验证码_各种封装
验证码
- namespace CZBK.TestProject.Common
- {
- public class ValidateCode
- {
- public ValidateCode()
- {
- }
- /// <summary>
- /// 验证码的最大长度
- /// </summary>
- public int MaxLength
- {
- get { return ; }
- }
- /// <summary>
- /// 验证码的最小长度
- /// </summary>
- public int MinLength
- {
- get { return ; }
- }
- /// <summary>
- /// 生成验证码
- /// </summary>
- /// <param name="length">指定验证码的长度</param>
- /// <returns></returns>
- public string CreateValidateCode(int length)
- {
- int[] randMembers = new int[length];
- int[] validateNums = new int[length];
- string validateNumberStr = "";
- //生成起始序列值
- int seekSeek = unchecked((int)DateTime.Now.Ticks);
- Random seekRand = new Random(seekSeek);
- int beginSeek = (int)seekRand.Next(, Int32.MaxValue - length * );
- int[] seeks = new int[length];
- for (int i = ; i < length; i++)
- {
- beginSeek += ;
- seeks[i] = beginSeek;
- }
- //生成随机数字
- for (int i = ; i < length; i++)
- {
- Random rand = new Random(seeks[i]);
- int pownum = * (int)Math.Pow(, length);
- randMembers[i] = rand.Next(pownum, Int32.MaxValue);
- }
- //抽取随机数字
- for (int i = ; i < length; i++)
- {
- string numStr = randMembers[i].ToString();
- int numLength = numStr.Length;
- Random rand = new Random();
- int numPosition = rand.Next(, numLength - );
- validateNums[i] = Int32.Parse(numStr.Substring(numPosition, ));
- }
- //生成验证码
- for (int i = ; i < length; i++)
- {
- validateNumberStr += validateNums[i].ToString();
- }
- return validateNumberStr;
- }
- /// <summary>
- /// 创建验证码的图片
- /// </summary>
- /// <param name="containsPage">要输出到的page对象</param>
- /// <param name="validateNum">验证码</param>
- public void CreateValidateGraphic(string validateCode, HttpContext context)
- {
- Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * 12.0), );
- Graphics g = Graphics.FromImage(image);
- try
- {
- //生成随机生成器
- Random random = new Random();
- //清空图片背景色
- g.Clear(Color.White);
- //画图片的干扰线
- for (int i = ; i < ; i++)
- {
- int x1 = random.Next(image.Width);
- int x2 = random.Next(image.Width);
- int y1 = random.Next(image.Height);
- int y2 = random.Next(image.Height);
- g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
- }
- Font font = new Font("Arial", , (FontStyle.Bold | FontStyle.Italic));
- LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(, , image.Width, image.Height),
- Color.Blue, Color.DarkRed, 1.2f, true);
- g.DrawString(validateCode, font, brush, , );
- //画图片的前景干扰点
- for (int i = ; i < ; i++)
- {
- int x = random.Next(image.Width);
- int y = random.Next(image.Height);
- image.SetPixel(x, y, Color.FromArgb(random.Next()));
- }
- //画图片的边框线
- g.DrawRectangle(new Pen(Color.Silver), , , image.Width - , image.Height - );
- //保存图片数据
- MemoryStream stream = new MemoryStream();
- image.Save(stream, ImageFormat.Jpeg);
- //输出图片流
- context.Response.Clear();
- context.Response.ContentType = "image/jpeg";
- context.Response.BinaryWrite(stream.ToArray());
- }
- finally
- {
- g.Dispose();
- image.Dispose();
- }
- }
- /// <summary>
- /// 得到验证码图片的长度
- /// </summary>
- /// <param name="validateNumLength">验证码的长度</param>
- /// <returns></returns>
- public static int GetImageWidth(int validateNumLength)
- {
- return (int)(validateNumLength * 12.0);
- }
- /// <summary>
- /// 得到验证码的高度
- /// </summary>
- /// <returns></returns>
- public static double GetImageHeight()
- {
- return 22.5;
- }
- }
- }
生成缩略图-->后面直接去调用就OK了
- public class ImageHelper
- {
- #region 缩略图
- /// <summary>
- /// 生成缩略图
- /// </summary>
- /// <param name="originalImagePath">源图路径(物理路径)</param>
- /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
- /// <param name="width">缩略图宽度</param>
- /// <param name="height">缩略图高度</param>
- /// <param name="mode">生成缩略图的方式</param>
- public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
- {
- System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
- int towidth = width;
- int toheight = height;
- int x = ;
- int y = ;
- int ow = originalImage.Width;
- int oh = originalImage.Height;
- switch (mode)
- {
- case "HW": //指定高宽缩放(可能变形)
- break;
- case "W": //指定宽,高按比例
- toheight = originalImage.Height * width / originalImage.Width;
- break;
- case "H": //指定高,宽按比例
- towidth = originalImage.Width * height / originalImage.Height;
- break;
- case "Cut": //指定高宽裁减(不变形)
- if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
- {
- oh = originalImage.Height;
- ow = originalImage.Height * towidth / toheight;
- y = ;
- x = (originalImage.Width - ow) / ;
- }
- else
- {
- ow = originalImage.Width;
- oh = originalImage.Width * height / towidth;
- x = ;
- y = (originalImage.Height - oh) / ;
- }
- break;
- default:
- break;
- }
- //新建一个bmp图片
- System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
- //新建一个画板
- System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
- //设置高质量插值法
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
- //设置高质量,低速度呈现平滑程度
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- //清空画布并以透明背景色填充
- g.Clear(System.Drawing.Color.Transparent);
- //在指定位置并且按指定大小绘制原图片的指定部分
- g.DrawImage(originalImage, new System.Drawing.Rectangle(, , towidth, toheight), new System.Drawing.Rectangle(x, y, ow, oh), System.Drawing.GraphicsUnit.Pixel);
- try
- {
- //以jpg格式保存缩略图
- bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- catch (System.Exception e)
- {
- throw e;
- }
- finally
- {
- originalImage.Dispose();
- bitmap.Dispose();
- g.Dispose();
- }
- }
- #endregion
- }
水印图
- public void ProcessRequest(HttpContext context)
- {
- //生成水印图
- context.Response.ContentType = "text/plain";
- //访问该页面创建一张图片,并且该图片上写字.
- using (Bitmap map = new Bitmap(, ))//创建了一个画布
- {
- using (Graphics g = Graphics.FromImage(map))//为画布创建了一个画笔
- {
- g.Clear(Color.Azure);
- g.DrawString("传智播客", new Font("黑体", 14.0f, FontStyle.Bold), Brushes.Red, new PointF(,));
- string fileName = Guid.NewGuid().ToString();
- map.Save(context.Request.MapPath("/ImagePath/"+fileName+".jpg"),System.Drawing.Imaging.ImageFormat.Jpeg);//保存图片.
- }
- }
- }
文件下载
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/plain";
- string encodeFileName = "aaa.txt";
- context.Response.AddHeader("Content-Disposition", string.Format("attachment;filename=\"{0}\"", encodeFileName));//在响应头中加上Content-Disposition,attachment表示以附件形式下载.
- context.Response.WriteFile("aaa.txt");
- }
文件上传
- public void ProcessRequest(HttpContext context)
- {
- context.Response.ContentType = "text/html";
- HttpPostedFile file=context.Request.Files["fileUp"];//接收文件数据.
- if (file == null)
- {
- context.Response.Write("请选择文件!!");
- }
- else
- {
- //判断上传的文件的类型.
- string fileName= Path.GetFileName(file.FileName);//获取文件名与扩张名. aa.jpg
- string fileExt = Path.GetExtension(fileName);//获取扩展名.
- if (fileExt == ".jpg"||fileExt==".gif")
- {
- string dir = "/ImagePath/"+DateTime.Now.Year+"/"+DateTime.Now.Month+"/"+DateTime.Now.Day+"/";
- //创建文件夹.
- Directory.CreateDirectory(Path.GetDirectoryName(context.Request.MapPath(dir)));
- //需要对上传的文件进行重命名.
- string newfileName = Guid.NewGuid().ToString();
- string fullDir = dir + newfileName + fileExt;//构建了完整文件路径.
- // file.SaveAs(context.Request.MapPath(fullDir));
- // file.SaveAs(context.Request.MapPath("/ImagePath/"+fileName));//保存文件
- using (Image imge = Image.FromStream(file.InputStream))//根据上传的文件流创建Image
- {
- using (Bitmap map = new Bitmap(imge.Width,imge.Height))
- {
- using (Graphics g = Graphics.FromImage(map))
- {
- //设置高质量插值法
- g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
- //设置高质量,低速度呈现平滑程度
- g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
- //先将图片画到画布上.
- g.DrawImage(imge, new Rectangle(, , imge.Width, imge.Height));
- //在右下角添加水印.
- g.DrawString("传智播客", new Font("黑体", 14.0f, FontStyle.Bold), Brushes.Red, new PointF(imge.Width-,imge.Height-));
- map.Save(context.Request.MapPath(fullDir),System.Drawing.Imaging.ImageFormat.Jpeg);
- }
- }
- }
- context.Response.Write("<html><head></head><body><img src='"+fullDir+"'/></body></html>");
- //最后将上传成功的图片的路径存储到数据库。
- }
- else
- {
- context.Response.Write("文件类型错误!!");
- }
- }
- }
PageBar
- public class PageBar
- {
- /// <summary>
- /// 获取数字页码条
- /// </summary>
- /// <param name="pageIndex">当前页码值</param>
- /// <param name="pageCount">总的页数</param>
- /// <returns></returns>
- public static string GetPageBar(int pageIndex, int pageCount)
- {
- if (pageCount == )//如果只有1页,不用在显示页码条
- {
- return string.Empty;
- }
- //计算起始位置与终止位置。
- int start = pageIndex - ;//页面上显示10个数字页码
- if (start < )
- {
- start = ;
- }
- int end = start + ;//终止位置.
- if(end>pageCount)//该条件成立,需要重新计算起始位置
- {
- end=pageCount;
- start = end - >?end-:;
- }
- StringBuilder sb = new StringBuilder();
- if (pageIndex > )
- {
- sb.Append(string.Format("<a href='?pageIndex={0}'>上一页</a>",pageIndex-));
- }
- for (int i = start; i <= end; i++)
- {
- if (i == pageIndex)//如果循环的数字与当前页码相等,那么不用超链接
- {
- sb.Append(i);
- }
- else
- {
- sb.Append(string.Format("<a href='?pageIndex={0}'>{0}</a>",i));
- }
- }
- if (pageIndex <pageCount)
- {
- sb.Append(string.Format("<a href='?pageIndex={0}'>下一页</a>", pageIndex +));
- }
- return sb.ToString();
- }
- }
Aspx 验证码_各种封装的更多相关文章
- 七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般情况下,点账户名——账户设置——安全设置,即可开通两步验证 具体步骤见链接 七牛云如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序(官网)对比谷歌身份验证器APP ...
- twitch游戏直播(【国外】平台)如何绑定二次验证码_虚拟MFA?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 twitch游戏直播([国外]平台)如何绑定二次验证码_虚拟MFA? 二次验证码小程序于谷歌身份验证器APP的优势(更多见官网 ...
- humlbe bundle如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 humlbe bundle如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的 ...
- R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 R星游戏如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载 ...
- 关于虎信如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 虎信如何绑定二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 1.无需下载ap ...
- paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器?
一般点账户名——设置——安全设置中开通虚拟MFA两步验证 具体步骤见链接 paypal支付平台如何使用二次验证码_虚拟MFA_两步验证_谷歌身份验证器? 二次验证码小程序于谷歌身份验证器APP的优势 ...
- 小程序_请求封装network
在utils目录下创建network.js文件封装请求 封装的network.js: //模块一,全局变量 let urlList = { host: 'http://47.106.25.53/', ...
- Java生成验证码_转
为了防止用户恶意,或者使用软件外挂提交一些内容,就得用验证码来阻止,虽然这个会影响用户体验,但为了避免一些问题很多网站都使用了验证码;今天下午参考文档弄了一个验证码,这里分享一下;这是一个web工程, ...
- coding如何绑定二次验证码_虚拟MFA_两步验证_身份验证?
Coding.net 是一个面向开发者的云端开发平台,提供 Git/SVN 代码托管.任务管理.在线 WebIDE.Cloud Studio.开发协作.文件管理.Wiki 管理.提供个人服务及企业管理 ...
随机推荐
- NEKOGAMES
http://bbs.3dmgame.com/thread-4133434-1-1.html
- AngularJs(Part 7)--Build-in Directives
Directives In AngularJS, we can use a variety of naming conventions to reference directives . In the ...
- 树莓派 Learning 003 --- GPIO 001 --- 点亮LED
树莓派 Learning 003 - GPIO 001 - 点亮LED 我的树莓派型号:Raspberry Pi 2 Model B V1.1 装机系统:NOOBS v1.9.2 树莓派 Learni ...
- unreal3对象管理模块分析
凡是稍微大一点的引擎框架,必然都要自己搞一套对象管理机制,如mfc.qt.glib等等,unreal自然也不例外. 究其原因,还是c++这种静态语言天生的不足,缺乏运行时类型操作功能,对于复杂庞大的逻 ...
- python处理大文件——文件流处理
最近处理一份1000G+的大文件,直接loading进内存不可能,只能分片读取.文件介绍如下: 该文件是一份压缩的比对后文件(sam文件),该文件由很多细小的结构单元组成,一个结构如下: 两种方法: ...
- leetcode:234. Palindrome Linked List
这个题目非常好.http://blog.csdn.net/u012249528/article/details/47124771给出了三种解法,其中前两个是不满足条件的,不过具有参考价值: 第一种办法 ...
- Sublime Text 3下安装Emmet的问题
电脑装了Sublime Text 3,顺便安装了很多插件,今天编写前端HTML代码时,想用起前端常用的Emmet插件的功能,Emmet插件已经安装好了,奈何输入简写格式,按“CTRL+E”,没有反应. ...
- 【分析】浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang)
[分析]浅谈C#中Control的Invoke与BeginInvoke在主副线程中的执行顺序和区别(SamWang) 今天无意中看到有关Invoke和BeginInvoke的一些资料,不太清楚它们之间 ...
- Ubuntu 安装 samba 实现文件共享和source insight 阅读uboot
环境:win10 + 虚拟机Ubuntu 12.04 一. samba的安装: # sudo apt-get install samba # sudo apt-get install smbfs 二. ...
- SQL Server事务回滚对自增键的影响
SQL Server事务回滚时是删除原先插入导致的自增值,也就是回滚之前你你插入一条数据导致自增键加1,回滚之后还是加1的状态 --如果获取当前操作最后插入的identity列的值:select @@ ...