using System;
using System.Collections.Generic;
using System.Text;
namespace ConsoleApplication1
{
class ChineseCode
{
static void Main(string[] args)
{
Encoding gb = Encoding.GetEncoding("gb2312");//GB2312表
object[] bytes = CreateRegionCode(4);
//根据编码获取中文汉字
string s1 = gb.GetString((byte[])Convert.ChangeType(bytes[0], typeof(byte[])));
string s2 = gb.GetString((byte[])Convert.ChangeType(bytes[1], typeof(byte[])));
string s3 = gb.GetString((byte[])Convert.ChangeType(bytes[2], typeof(byte[])));
string s4 = gb.GetString((byte[])Convert.ChangeType(bytes[3], typeof(byte[])));
Console.WriteLine(s1 + s2 + s3 + s4);
}
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];
//循环数组 组成第一个元素
for (int i = 0; i < strlength; i++)
{
int r1 = rnd.Next(11, 14);//第一位
string str_r1 = rBase[r1].Trim();
//更新随机数 获取第二位
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();
//更新随即数 获取区位第三位
rnd =new Random(r2*unchecked((int)DateTime.Now.Ticks)+i);
int r3 = rnd.Next(10,16);
string str_r3=rBase[r3].Trim();
//更新随机数 获取区位第四位
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();
// 组合2个字节产生随机汉字区位码
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;
}
}
}