asp.net下中文验证码,免费开源代码
程序员文章站
2022-06-14 11:38:24
using system; using system.data; using system.configuration; using ...
using system;
using system.data;
using system.configuration;
using system.collections;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.text;
using system.drawing;
public partial class cncode : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
//获取gb2312编码页(表)
encoding gb = encoding.getencoding("gb2312");
//调用函数产生4个随机中文汉字编码
object[] bytes = createregioncode(4);
//根据汉字编码的字节数组解码出中文汉字
string str1 = gb.getstring((byte[])convert.changetype(bytes[0], typeof(byte[])));
string str2 = gb.getstring((byte[])convert.changetype(bytes[1], typeof(byte[])));
string str3 = gb.getstring((byte[])convert.changetype(bytes[2], typeof(byte[])));
string str4 = gb.getstring((byte[])convert.changetype(bytes[3], typeof(byte[])));
//输出的控制台
createimage(str1 + str2 + str3 + str4);
}
/*
此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将
四个字节数组存储在object数组中。
参数:strlength,代表需要产生的汉字个数
*/
public static object[] 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];
/**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中
每个汉字有四个区位码组成
区位码第1位和区位码第2位作为字节数组第一个元素
区位码第3位和区位码第4位作为字节数组第二个元素
*/
for(int i=0;i<strlength;i++)
{
//区位码第1位
int r1=rnd.next(11,14);
string str_r1=rbase[r1].trim();
//区位码第2位
rnd=new random(r1*unchecked((int)datetime.now.ticks)+i);//更换随机数发生器的种子避免产生重复值
int r2;
if (r1==13)
{
r2=rnd.next(0,7);
}
else
{
r2=rnd.next(0,16);
}
string str_r2=rbase[r2].trim();
//区位码第3位
rnd=new random(r2*unchecked((int)datetime.now.ticks)+i);
int r3=rnd.next(10,16);
string str_r3=rbase[r3].trim();
//区位码第4位
rnd=new random(r3*unchecked((int)datetime.now.ticks)+i);
int r4;
if (r3==10)
{
r4=rnd.next(1,16);
}
else if (r3==15)
{
r4=rnd.next(0,15);
}
else
{
r4=rnd.next(0,16);
}
string str_r4=rbase[r4].trim();
//定义两个字节变量存储产生的随机汉字区位码
byte byte1=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;
}
private void createimage(string checkcode)
{
int iwidth = (int)(checkcode.length * 25);
system.drawing.bitmap image = new system.drawing.bitmap(iwidth, 20);
graphics g = graphics.fromimage(image);
font f = new system.drawing.font("arial", 12, system.drawing.fontstyle.bold);
brush b = new system.drawing.solidbrush(color.white);
//g.fillrectangle(new system.drawing.solidbrush(color.blue),0,0,image.width, image.height);
g.clear(color.blue);
g.drawstring(checkcode, f, b, 3, 3);
pen blackpen = new pen(color.black, 0);
random rand = new random();
for (int i = 0; i < 4; i++)
{
int y = rand.next(image.height);
g.drawline(blackpen, 0, y, image.width, y);
}
system.io.memorystream ms = new system.io.memorystream();
image.save(ms, system.drawing.imaging.imageformat.jpeg);
response.clearcontent();
response.contenttype = "image/png";
response.binarywrite(ms.toarray());
g.dispose();
image.dispose();
}
}
该文章转载自'大智の博客':http://www.csafe.cn/article.asp?id=1274
using system.data;
using system.configuration;
using system.collections;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
using system.text;
using system.drawing;
public partial class cncode : system.web.ui.page
{
protected void page_load(object sender, eventargs e)
{
//获取gb2312编码页(表)
encoding gb = encoding.getencoding("gb2312");
//调用函数产生4个随机中文汉字编码
object[] bytes = createregioncode(4);
//根据汉字编码的字节数组解码出中文汉字
string str1 = gb.getstring((byte[])convert.changetype(bytes[0], typeof(byte[])));
string str2 = gb.getstring((byte[])convert.changetype(bytes[1], typeof(byte[])));
string str3 = gb.getstring((byte[])convert.changetype(bytes[2], typeof(byte[])));
string str4 = gb.getstring((byte[])convert.changetype(bytes[3], typeof(byte[])));
//输出的控制台
createimage(str1 + str2 + str3 + str4);
}
/*
此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将
四个字节数组存储在object数组中。
参数:strlength,代表需要产生的汉字个数
*/
public static object[] 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];
/**//*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中
每个汉字有四个区位码组成
区位码第1位和区位码第2位作为字节数组第一个元素
区位码第3位和区位码第4位作为字节数组第二个元素
*/
for(int i=0;i<strlength;i++)
{
//区位码第1位
int r1=rnd.next(11,14);
string str_r1=rbase[r1].trim();
//区位码第2位
rnd=new random(r1*unchecked((int)datetime.now.ticks)+i);//更换随机数发生器的种子避免产生重复值
int r2;
if (r1==13)
{
r2=rnd.next(0,7);
}
else
{
r2=rnd.next(0,16);
}
string str_r2=rbase[r2].trim();
//区位码第3位
rnd=new random(r2*unchecked((int)datetime.now.ticks)+i);
int r3=rnd.next(10,16);
string str_r3=rbase[r3].trim();
//区位码第4位
rnd=new random(r3*unchecked((int)datetime.now.ticks)+i);
int r4;
if (r3==10)
{
r4=rnd.next(1,16);
}
else if (r3==15)
{
r4=rnd.next(0,15);
}
else
{
r4=rnd.next(0,16);
}
string str_r4=rbase[r4].trim();
//定义两个字节变量存储产生的随机汉字区位码
byte byte1=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;
}
private void createimage(string checkcode)
{
int iwidth = (int)(checkcode.length * 25);
system.drawing.bitmap image = new system.drawing.bitmap(iwidth, 20);
graphics g = graphics.fromimage(image);
font f = new system.drawing.font("arial", 12, system.drawing.fontstyle.bold);
brush b = new system.drawing.solidbrush(color.white);
//g.fillrectangle(new system.drawing.solidbrush(color.blue),0,0,image.width, image.height);
g.clear(color.blue);
g.drawstring(checkcode, f, b, 3, 3);
pen blackpen = new pen(color.black, 0);
random rand = new random();
for (int i = 0; i < 4; i++)
{
int y = rand.next(image.height);
g.drawline(blackpen, 0, y, image.width, y);
}
system.io.memorystream ms = new system.io.memorystream();
image.save(ms, system.drawing.imaging.imageformat.jpeg);
response.clearcontent();
response.contenttype = "image/png";
response.binarywrite(ms.toarray());
g.dispose();
image.dispose();
}
}
该文章转载自'大智の博客':http://www.csafe.cn/article.asp?id=1274
上一篇: QQ邮箱文件中转站有什么用
下一篇: 阿里旺旺如何发送离线文件给陌生人