2022年WEB复杂验证码实现 .pdf

上传人:Che****ry 文档编号:27259309 上传时间:2022-07-23 格式:PDF 页数:5 大小:39.60KB
返回 下载 相关 举报
2022年WEB复杂验证码实现 .pdf_第1页
第1页 / 共5页
2022年WEB复杂验证码实现 .pdf_第2页
第2页 / 共5页
点击查看更多>>
资源描述

《2022年WEB复杂验证码实现 .pdf》由会员分享,可在线阅读,更多相关《2022年WEB复杂验证码实现 .pdf(5页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、enumCodeType 数字 = 1, 英文, 中文 CodeType type = CodeType.数字; protectedvoid Page_Load(object sender, EventArgs e) string codes = CreateCode(4); Sessionseed = codes; CreateImg(codes); / /字符工厂 , 生成对应长度的字符串/ / / privatestring CreateCode( int length) Random ran = new Random (); string codeStr = string .Empty

2、; switch (type) case CodeType. 数字: for ( int i = 0; i length; i+) codeStr += (char)ran.Next(48, 57).ToString(); CreateImg(codeStr); return codeStr; case CodeType . 英文: for ( int i = 0; i length; i+) codeStr += (char)ran.Next(65, 91).ToString(); CreateImg(codeStr); return codeStr; case CodeType . 中文:

3、 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 5 页 - - - - - - - - - Encoding gb = Encoding.GetEncoding( gb2312 ); / 调用函数产生 4个随机中文汉字编码object bytes = CreateRegionCode(length); for ( int i = 0; i length; i+) / 根据汉字编码的字节数组解码出中文汉字 codeStr += gb.GetString(byte ) Co

4、nvert .ChangeType(bytesi, typeof ( byte ); CreateImg(codeStr); return codeStr; default : returnnull ; / /根据产生的字符串绘制图片/ /需要绘制到图片上的字符串 privatevoid CreateImg( string code) Bitmap bmp = null ; / 字符像素大小不一样在此创建长度不同的bmp if (type = CodeType.数字) bmp = newBitmap( int ) Math.Ceiling(code.Length * 9.5) + 10, 22

5、); elseif (type = CodeType.英文) bmp = new Bitmap( int ) Math.Ceiling(code.Length * 12.5) + 10, 22); else bmp = new Bitmap( int ) Math.Ceiling(code.Length * 20.5) + 10, 22); Graphics g = Graphics.FromImage(bmp); try 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共

6、5 页 - - - - - - - - - / 生成随机生成器Random random = new Random (); / 清空图片背景色 g.Clear(Color.White); / 画图片的干扰线for ( int i = 0; i 5; i+) int x1 = random.Next(bmp.Width); int x2 = random.Next(bmp.Width); int y1=random .Next (bmp .Height ); int y2 = random.Next(bmp.Height); g.DrawLine(new Pen(Color.Silver), x

7、1, y1, x2, y2); Font font = new Font( Arial, 12, (FontStyle.Bold | FontStyle.Italic); / 线性渐变 LinearGradientBrush brush = newLinearGradientBrush(newRectangle(0, 0, bmp.Width, bmp.Height), Color.Blue, Color.DarkRed, 1.2f, true ); g.DrawString(code, font, brush, 3, 2); / 画图片的前景干扰点for ( int i = 0; i 5;

8、i+) int x = random.Next(bmp.Width); int y = random.Next(bmp.Height); bmp.SetPixel(x, y, Color.FromArgb(random.Next(); / 画图片的边框线 g.DrawRectangle(new Pen(Color.Silver), 0, 0, bmp.Width - 1, bmp.Height - 1); System.IO.MemoryStream ms = newSystem.IO. MemoryStream (); bmp.Save(ms, System.Drawing.Imaging.

9、ImageFormat.Gif); System.Web.HttpContext.Current.Response.ClearContent(); System.Web.HttpContext.Current.Response.ContentType = image/Gif; System.Web.HttpContext.Current.Response.BinaryWrite(ms.ToArray(); catch 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 5 页

10、 - - - - - - - - - finally g.Dispose(); bmp.Dispose(); publicobject CreateRegionCode(int strlength) / 定义一个字符串数组储存汉字编码的组成元素string rBase = new String 16 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , a , b , c , d , e , f ; Random rnd = new Random (); / 定义一个 object 数组用来object bytes = new object strlength; /*

11、/ /* 每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject 数组中每个汉字有四个区位码组成区位码第 1位和区位码第 2位作为字节数组第一个元素区位码第 3位和区位码第 4位作为字节数组第二个元素 */ for ( int i = 0; i strlength; i+) / 区位码第 1位int r1 = rnd.Next(11, 14); string str_r1 = rBaser1.Trim(); / 区位码第 2位 rnd = newRandom (r1 * unchecked( int ) DateTime.Now.Ticks) + i);/ 更换随机数发生器的种子

12、避免产生重复值int r2; if (r1 = 13) r2 = rnd.Next(0, 7); else 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 5 页 - - - - - - - - - r2 = rnd.Next(0, 16); string str_r2 = rBaser2.Trim(); / 区位码第 3位 rnd = newRandom (r2 * unchecked( int ) DateTime.Now.Ticks) + i); int r3 =

13、rnd.Next(10, 16); string str_r3 = rBaser3.Trim(); / 区位码第 4位 rnd = newRandom (r3 * unchecked( int ) DateTime.Now.Ticks) + i); int r4; if (r3 = 10) r4 = rnd.Next(1, 16); elseif (r3 = 15) r4 = rnd.Next(0, 15); else r4 = rnd.Next(0, 16); string str_r4 = rBaser4.Trim(); / 定义两个字节变量存储产生的随机汉字区位码byte byte1 =

14、 Convert .ToByte(str_r1 + str_r2, 16); byte byte2 = Convert .ToByte(str_r3 + str_r4, 16); / 将两个字节变量存储在字节数组中byte str_r = new byte byte1, byte2 ; / 将产生的一个汉字的字节数组放入object 数组中 bytes.SetValue(str_r, i); return bytes; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 5 页 - - - - - - - - -

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 高考资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁