原文出处http://edu.cn700.com/Edu_24/2005490187-1.html 仅供学习研究用
/// <summary>
/// 随机产生一个汉字
/// </summary>
/// <returns></returns>
private String CreateWord()
{
//汉字编码组成元素
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();
//区位码第一位
int r1 = rnd.Next(11,14);//汉字编码是从b0开始的,到d7是常用的汉字
String r1String = rBase[r1].ToString().Trim();
//区位码第二位
rnd = new Random(r1*unchecked((int)DateTime.Now.Ticks));//更换随机数发生器的种子避免产生重复值
int r2;
if(r1==13)
{
r2 = rnd.Next(0,7);//区位D7开始以后的汉字都是很难见到的繁杂汉字
}
else
{
r2 = rnd.Next(0,16);
}
String r2String = rBase[r2].ToString().Trim();
//区位码第三位
rnd = new Random(r2*unchecked((int)DateTime.Now.Ticks));
int r3 = rnd.Next(10,16);
String r3String = rBase[r3].ToString().Trim();
//区位码第四位
rnd = new Random(r3*unchecked((int)DateTime.Now.Ticks));
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 r4String = rBase[r4].ToString().Trim();
//定义两个字节变量存储产生的随机汉字区位码
byte byte1 = Convert.ToByte(r1String+r2String,16);
byte byte2 = Convert.ToByte(r3String+r4String,16);
//将产生的一个汉字的字节数组放入一个byte数组中
byte[] wordByte = new byte[]{byte1,byte2};
//输出
Encoding gb = Encoding.GetEncoding("gb2312");
String word = gb.GetString(wordByte,0,wordByte.Length);
return word;
}