1 /// <summary> |
2 /// 随机中文码 |
3 /// </summary> |
4 /// <returns></returns> |
5 private string GetRndCh() |
6 { |
7 System.Text.Encoding gb = System.Text.Encoding.Default; //获取GB2312编码页(表) |
8 object [] bytes = CreateRegionCode(4); //调用函数产生4个随机中文汉字编码 |
9 string [] str = new string [4]; |
10 System.Text.StringBuilder sb = new System.Text.StringBuilder(); |
11 for ( int i = 0; i < 4; i++) |
12 { |
13 //根据汉字编码的字节数组解码出中文汉字 |
14 str[i] = gb.GetString(( byte [])Convert.ChangeType(bytes[i], typeof ( byte []))); |
15 sb.Append( str[i].ToString()); |
16 } |
17 return sb.ToString (); |
18 } |
19 |
20 |
21 /// <summary> |
22 /// 产生随机中文汉字编码 |
23 /// </summary> |
24 /// <param name="strlength"></param> |
25 /// <returns></returns> |
26 private static object [] CreateRegionCode( int strlength) |
27 { |
28 //定义一个字符串数组储存汉字编码的组成元素 |
29 string [] rBase = new String[16] { "0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "a" , "b" , "c" , "d" , "e" , "f" }; |
30 Random rnd = new Random(); |
31 object [] bytes = new object [strlength]; |
32 |
33 for ( int i = 0; i < strlength; i++) |
34 { |
35 //区位码第1位 |
36 int r1 = rnd.Next(11, 14); |
37 string str_r1 = rBase[r1].Trim(); |
38 |
39 //区位码第2位 |
40 rnd = new Random(r1 * unchecked (( int )DateTime.Now.Ticks) + i); |
41 int r2; |
42 if (r1 == 13) |
43 { |
44 r2 = rnd.Next(0, 7); |
45 } |
46 else |
47 { |
48 r2 = rnd.Next(0, 16); |
49 } |
50 string str_r2 = rBase[r2].Trim(); |
51 |
52 //区位码第3位 |
53 rnd = new Random(r2 * unchecked (( int )DateTime.Now.Ticks) + i); //更换随机种子 |
54 int r3 = rnd.Next(10, 16); |
55 string str_r3 = rBase[r3].Trim(); |
56 |
57 //区位码第4位 |
58 rnd = new Random(r3 * unchecked (( int )DateTime.Now.Ticks) + i); |
59 int r4; |
60 if (r3 == 10) |
61 { |
62 r4 = rnd.Next(1, 16); |
63 } |
64 else if (r3 == 15) |
65 { |
66 r4 = rnd.Next(0, 15); |
67 } |
68 else |
69 { |
70 r4 = rnd.Next(0, 16); |
71 } |
72 string str_r4 = rBase[r4].Trim(); |
73 |
74 //定义两个字节变量存储产生的随机汉字区位码 |
75 byte byte1 = Convert.ToByte(str_r1 + str_r2, 16); |
76 byte byte2 = Convert.ToByte(str_r3 + str_r4, 16); |
77 |
78 //将两个字节变量存储在字节数组中 |
79 byte [] str_r = new byte [] { byte1, byte2 }; |
80 |
81 //将产生的一个汉字的字节数组放入object数组中 |
82 bytes.SetValue(str_r, i); |
83 } |
84 return bytes; |
85 } |
原文:https://www.cnblogs.com/skyay/p/10264414.html