温馨提示:代码在线浏览功能只能做为源码浏览参考,不能展示项目的全部,如果想更进一步了解该代码请下载:Ajax无刷新中文验证码
当前文件路径:ChineseCode/App_Code/ChineseCode.cs

1using System; 2
using System.Data; 3
using System.Configuration; 4
using System.Web; 5
using System.Web.Security; 6
using System.Web.UI; 7
using System.Web.UI.WebControls; 8
using System.Web.UI.WebControls.WebParts; 9
using System.Web.UI.HtmlControls; 10
using System.Text; 11
//该源码下载自www.51aspx.com(51aspx.com) 12
13
/// <summary> 14
/// ChineseCode 的摘要说明 15
/// 作者:高亮 16
/// </summary> 17
18
public class ChineseCode 19
{ 20
public static void Main() 21
{ 22
//获取GB2312编码页(表) 23
Encoding gb = Encoding.GetEncoding("gb2312"); 24
25
//调用函数产生4个随机中文汉字编码 26
object[] bytes = CreateRegionCode(4); 27
28
//根据汉字编码的字节数组解码出中文汉字 29
string str1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[]))); 30
string str2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[]))); 31
string str3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[]))); 32
string str4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[]))); 33
34
//输出的控制台 35
Console.WriteLine(str1 + str2 + str3 + str4); 36
} 37
38
39
40
///此函数在汉字编码范围内随机创建含两个元素的十六进制字节数组,每个字节数组代表一个汉字,并将 41
///四个字节数组存储在object数组中。 42
///参数:strlength,代表需要产生的汉字个数 43
public static object[] CreateRegionCode(int strlength) 44
{ 45
//定义一个字符串数组储存汉字编码的组成元素 46
string[] rBase = new String[16] { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f" }; 47
48
Random rnd = new Random(); 49
50
//定义一个object数组用来 51
object[] bytes = new object[strlength]; 52
53
/**/ 54
/*每循环一次产生一个含两个元素的十六进制字节数组,并将其放入bject数组中 55
每个汉字有四个区位码组成 56
区位码第1位和区位码第2位作为字节数组第一个元素 57
区位码第3位和区位码第4位作为字节数组第二个元素 58
*/ 59
for (int i = 0; i < strlength; i++) 60
{ 61
//区位码第1位 62
int r1 = rnd.Next(11, 14); 63
string str_r1 = rBase[r1].Trim(); 64
65
//区位码第2位 66
rnd = new Random(r1 * unchecked((int)DateTime.Now.Ticks) + i);//更换随机数发生器的种子避免产生重复值 67
int r2; 68
if (r1 == 13) 69
{ 70
r2 = rnd.Next(0, 7); 71
} 72
else 73
{ 74
r2 = rnd.Next(0, 16); 75
} 76
string str_r2 = rBase[r2].Trim(); 77
78
//区位码第3位 79
rnd = new Random(r2 * unchecked((int)DateTime.Now.Ticks) + i); 80
int r3 = rnd.Next(10, 16); 81
string str_r3 = rBase[r3].Trim(); 82
83
//区位码第4位 84
rnd = new Random(r3 * unchecked((int)DateTime.Now.Ticks) + i); 85
int r4; 86
if (r3 == 10) 87
{ 88
r4 = rnd.Next(1, 16); 89
} 90
else if (r3 == 15) 91
{ 92
r4 = rnd.Next(0, 15); 93
} 94
else 95
{ 96
r4 = rnd.Next(0, 16); 97
} 98
string str_r4 = rBase[r4].Trim(); 99
100
//定义两个字节变量存储产生的随机汉字区位码 101
byte byte1 = Convert.ToByte(str_r1 + str_r2, 16); 102
byte byte2 = Convert.ToByte(str_r3 + str_r4, 16); 103
//将两个字节变量存储在字节数组中 104
byte[] str_r = new byte[] { byte1, byte2 }; 105
106
//将产生的一个汉字的字节数组放入object数组中 107
bytes.SetValue(str_r, i); 108
109
} 110
111
return bytes; 112
113
} 114
} 115







}