有时在注册论坛会员时,网页中的验证码是以汉字形式出现的。汉字验证码技术比字母和数字混合验证码技术更先进。通过汉字验证码,可以有效地防止非法用户灌水。
本实例中主要通过生成的汉字区位码,将其转换成汉字。
区位码是汉字一一对应的编码,用4位数字表示,前两位从01到94称为区码,后两位从01到94称为位码,一个汉字的前一半是ASC II码位“160+区码”的字符,后一半是ASC II码“160+位码”的字符。
今天把主要代码给贴出来供需要的朋友参考下:
在页面加载时调用相应的方法就可以了:
protected void Page_Load(object sender, EventArgs e)
{
GraphicsImage(4); //调用方法生成四位汉字验证码
}
private void GraphicsImage(int length)
{
System.Drawing.Bitmap image =
new System.Drawing.Bitmap((int)Math.Ceiling((GetString(length).Length * 22.5)), 22);
Graphics g = Graphics.FromImage(image); //创建画布
try
{
//生成随机生成器
Random random = new Random();
//清空图片背景色
g.Clear(Color.White);
//画图片的背景噪音线
for (int i = 0; i < 1; 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.Black), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Couriew New", 12, System.Drawing.FontStyle.Bold);
System.Drawing.Drawing2D.LinearGradientBrush brush
= new System.Drawing.Drawing2D.LinearGradientBrush
(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(GetString(length), font, brush, 2, 2);
//画图片的前景噪音点
for (int i = 0; i < 50; 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), 0, 0, image.Width - 1, image.Height - 1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
catch (Exception ms)
{
Response.Write(ms.Message);
}
}private string GetString(int length)
{
Encoding gb = Encoding.GetEncoding("gb2312");
object[] bytes = CreateString(length);
//根据汉字字节解码出中文汉字
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[])));
string str = str1 + str2 + str3 + str4;
Response.Cookies.Add(new HttpCookie("CheckCode", str));
return str;
}private object[] CreateString(int strlength)
{
//定义一个数组存储汉字编码的组成元素
string[] str = new string[16]
{ "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" };
Random ran = new Random(); //定义一个随机数对象
object[] bytes = new object[strlength];
for (int i = 0; i < strlength; i++)
{
//获取区位码第一位
int ran1 = ran.Next(11, 14);
string str1 = str[ran1].Trim();
//获取区位码第二位并防止数据重复
ran = new Random(ran1 * unchecked((int)DateTime.Now.Ticks) + i);
int ran2;
if (ran1 == 13)
{
ran2 = ran.Next(0, 7);
}
else
{
ran2 = ran.Next(0, 16);
}
string str2 = str[ran2].Trim();
//获取区位码第三位
ran = new Random(ran2 * unchecked((int)DateTime.Now.Ticks) + i);
int ran3 = ran.Next(10, 16);
string str3 = str[ran3].Trim();
//获取区位码第四位
ran = new Random(ran3 * unchecked((int)DateTime.Now.Ticks) + i);
int ran4;
if (ran3 == 10)
{
ran4 = ran.Next(1, 16);
}
else if (ran3 == 15)
{
ran4 = ran.Next(0, 15);
}
else
{
ran4 = ran.Next(0, 16);
}
string str4 = str[ran4].Trim();
//定义字节变量存储产生的随机汉字区位码
byte byte1 = Convert.ToByte(str1 + str2, 16);
byte byte2 = Convert.ToByte(str3 + str4, 16);
byte[] stradd = new byte[] { byte1, byte2 };
//将产生的汉字字节放入数组
bytes.SetValue(stradd, i);
}
return bytes;
}
原帖地址:http://www.cnblogs.com/wangsaiming/archive/2011/06/27/2091256.html
分享到:
相关推荐
中文验证码识别则是针对含有中文字符的验证码进行解析,增加了识别难度,因为汉字的数量庞大且形状复杂,使得机器识别相较于纯数字或字母的验证码更为困难。 在给定的资源中,我们看到有以下几个关键文件: 1. `cds...
### C#生成中文汉字验证码源码解析 #### 概述 验证码是一种常用的安全措施,用于区分用户是人类...尽管该方案具有一定的复杂度,但对于需要在Web应用程序中集成中文验证码功能的开发者来说,仍具有一定的参考价值。
汉字验证码是一种用于网络安全验证的技术,主要应用于论坛、网站后台等在线平台,以防止恶意自动化的机器人或爬虫程序进行非法操作。它通过显示一个由随机汉字组成的图像,要求用户输入看到的文字来验证其为真实的...
汉字验证码识别尤其具有挑战性,因为它涉及到中文字符的多样性以及图像处理的复杂性。下面将详细介绍图像分割、图像去噪和图像识别这三个关键知识点。 首先,图像分割是验证码识别的第一步,它的目标是将含有文字的...
在ASP中生成汉字验证码是一项常见的安全措施,目的是防止自动化程序(如机器人)进行恶意操作,如注册、登录或提交表单。汉字验证码的使用增加了破解的难度,因为相比纯数字或字母,汉字具有更高的复杂性和多样性。 ...
中文验证码由于其字符集的复杂性,增加了破解的难度,为网站的安全提供了额外的保障。 验证码的核心在于生成一串随机且难以通过机器自动识别的字符。在ASP中实现汉字验证码,我们需要以下几个关键步骤: 1. **汉字...
在中文环境中,中文验证码则是使用中文字符来增加机器识别的难度,从而提高系统安全性。C#是一种广泛应用于Windows平台的面向对象的编程语言,它拥有丰富的库支持,非常适合开发这种类型的应用。 在C#中实现中文...
jsp验证码,jsp中文验证码,数字验证码,汉字验证码
php,验证码,汉字验证码,PHP汉字验证码
【标题】: "适用于各种编程中文汉字验证码制作" 在编程领域,验证码是一种常见的安全机制,用于验证用户身份,防止自动脚本或者恶意机器人进行非法操作。中文汉字验证码因其独特的复杂性和难以被机器识别的特性,...
在这个特定的压缩包文件中,包含的是汉字验证码和字母数字验证码的源码,主要涉及C#和VB.NET两种编程语言。下面将详细介绍这两种验证码类型及其相关技术。 首先,汉字验证码是验证码的一种形式,它由随机选择的汉字...
在asp汉字验证码的实现中,我们不依赖任何外部组件,而是完全通过asp代码来生成和验证汉字验证码。这使得该技术在资源有限的环境中也能有效应用。 创建asp汉字验证码的核心步骤包括以下几个方面: 1. **汉字库选择...
汉字验证码,尤其在中文互联网环境中,由于其语言特性,增加了机器识别的难度,从而提高了系统的安全性。本资源“汉字验证码图10001张”提供了大量的汉字验证码图像,适用于训练计算机视觉和深度学习模型,以提升...
php汉字验证码程序,很好的!~~~~~~~~~
中文验证码是这种验证机制的一个特殊形式,它使用中文字符而非常见的字母或数字来提高系统的安全性。这种类型的验证码增加了机器识别的难度,因为计算机识别中文字符通常比识别拉丁字母或数字更复杂。 验证码的主要...
汉字验证码增加了破解的难度,因为相对于字母和数字,人类对汉字的识别更复杂,而机器识别汉字则更加困难。 首先,生成汉字验证码的关键在于拥有一个汉字库,可以从 Unicode 范围内的汉字中随机选取。Unicode 是一...
中文汉字验证码是验证码的一种形式,其特点是使用中文汉字作为识别内容。这种验证码设计的初衷是为了增加机器识别的难度,因为汉字字符众多且形状复杂,相比数字或字母组合,更不易被自动化程序破解。中文汉字验证码...