NET中英文混合验证码实现代码
最终效果如图:
。
CheckCode.aspx.cs代码如下:复制代码如下: protected void page _ load(object sender,eventargs e) {//get GB2312编码页(table)/* */* * *生成中文验证码要使用的方法*注意,生成中文验证码时,更改生成验证码图片的宽度* var image code=new system。drawing.bitmap ((int) math .天花板((code。长度* 22.5))、23);//定义图片的宽度和高度* *///var GB=encoding . getencoding(' GB 2312 ');/* */////调用函数生成4个随机汉字编码//object[]bytes=createregioncode(4);/* */////汉字按照汉字编码的字节数组解码。//var sb code=new stringbuilder()。追加(GB . getstring((byte[])convert . change type(bytes[0],typeof(byte[])))) //。追加(gb。GetString((字节[])转换。ChangeType(字节[1],typeof(字节[])))) //。追加(gb。GetString((字节[])转换。ChangeType(字节[2],typeof(字节[])))) //。追加(gb。GetString((字节[])转换。ChangeType(字节[3],typeof(字节[])))));//CreateCheckCodeImage(sbCode。ToString());CreateCheckCodeImage(GenerateCheckCode());//生成数字英语要用的方法}生成汉字验证码#区域生成汉字验证码//* *////summary///该函数随机创建一个包含汉字编码范围内两个元素的十六进制字节数组,每个字节数组代表一个汉字,在对象数组中存储四个字节数组。
////summary///param name=' strLength '代表需要产生的汉字个数/param///returns/returns static object[]CreateRegionCode(int strLength){ var rBase=new[]{ ' 0 ',' 1 ',' 2 ',' 3 ',' 4 ',' 5 ',' 6 ',' 7 ',' 8 ',' 9 ',' a ',' b ',' c ',' d ',' e ',' f ' };var Random=new Random();var字节=新对象[strLength];/**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入物体数组中每个汉字有四个区位码组成区位码第一位和区位码第2位作为字节数组第一个元素区位码第3位和区位码第四位作为字节数组第二个元素*/for(int I=0;长度;i ) { //区位码第一位var r1=随机。接下来(11,14);var str_r1=rBase[r1].trim();随机=新的随机(R1 *未选中((整数))日期时间.现在。滴答)I);//更换随机数发生器的种子避免产生重复值var R2=0;if (r1==13) r2=随机。下一个(0,7);否则r2=随机。下一个(0,16);var str_r2=rBase[r2].trim();//区位码第3位随机=新的随机(R2 *未选中((整数)日期时间).现在。滴答)I);var r3=随机。接下来(10,16);var str_r3=rBase[r3].trim();//区位码第四位随机=新的随机(R3 *未选中((int)DateTime))。现在。滴答)I);var R4=0;if (r3==10) r4=随机。下一个(1,16);否则if (r3==15) r4=随机。下一个(0,15);否则r4=随机。下一个(0,16);var str_r4=rBase[r4].trim();变量字节1=转换. ToByte(str_r1 str_r2,16);变量字节2=转换. ToByte(str_r3 str_r4,16);//将两个字节变量存储在字节数组中var str_r=new[] { byte1,byte 2 };//将产生的一个汉字的字节数组放入目标数组中字节SetValue(str_r,I);}返回字节;} #endregion生成图片#地区生成图片void CreateCheckCodeImage(字符串代码){ var imageCode=新系统.绘图。位图((整数)数学。天花板((代码。长度* 12.5))、23);//定义图片的宽度和高度var g=图形.来自图像(imageCode);//加载图片到画布上尝试{ var Random=new Random();透明(颜色。白色);//清空图片背景色//画图片的背景噪音线for(int I=0;i 25i ) { var x1=随机。下一步(图像代码.宽度);var x2=随机。下一步(图像代码.宽度);var y1=随机。下一步(图像代码.身高);var y2=随机。下一步(图像代码.身高);画线(新钢笔(颜色。银)、新点(x1,y1)、新点(x2,y2));} var字体=新系统。绘图。字体(' Arial ',12F,系统。绘图。字体样式。粗体|系统绘图。字体样式。斜体);定义变量画笔=新系统绘图。2d图纸。linegradientbrush(新矩形(0,0,imageCode .宽度,图像代码。高度)、颜色。蓝色,彩色。暗红色,1.2F,真);g。拉绳(代码、字体、画笔、2、2);//画图片的前景噪音点for(int I=0;i 100i ) { var x=随机。下一步(图像代码.宽度);var y=随机。下一步(图像代码.身高);图像代码.设置像素(x,y,颜色FromArgb(随机. next()));} //画图片的边框线画矩形(新钢笔(颜色。银色),0,0,imageCode .宽度- 1,图像代码。身高-1);var ms=新系统IO。内存流();图像代码.保存(毫秒,系统绘图。成像。imageformat。JPEG);回应ClearContent();回应内容类型=' image/Jpeg ';回应二进制写入(ms . to array());}最后{ g . Dispose();图像代码.dispose();} } #endregion生成数据验证码#地区生成数据验证码私有字符串GenerateCheckCode(){ int number;字符代码;字符串检查代码=字符串。空的;var Random=new Random();for(int I=0;i5;i ) { number=random .next();if(number % 2==0)code=(char)(“0”(char)(number % 10));否则代码=(字符)(“A”(字符)(数字% 26));checkCode=代码. ToString();}返回checkCode} #endregion使用验证码页面:复制代码代码如下:表单id=' FOrmCOde ' runat=' server ' div img src=' http :检查代码。aspx ' src=' http :检查代码。aspx ' alt='验证码//div/表单
版权声明:NET中英文混合验证码实现代码是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。

















