Blame view

Yi.Abp.Net8/framework/Yi.Framework.Core/Helper/RandomHelper.cs 3.8 KB
515fceeb   “wangming”   框架初始化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
  using System;
  using System.Collections.Generic;
  using System.Text;
  using System.Text.RegularExpressions;
  
  namespace Yi.Framework.Core.Helper
  {
      public class RandomHelper
      {
          public static string replaceBianLiang(string content)
          {
              content = content.Replace("{当前时间}", DateTime.Now.TimeOfDay.ToString());
              string[] bianliang = new string[] { "{随机字母}", "{随机数字}", "{随机汉字}" };
              Regex r;
              int count;
              string readstr = "";
              foreach (string str in bianliang)
              {
                  count = (content.Length - content.Replace(str, "").Length) / str.Length;
                  if (str == "{随机汉字}") readstr = RandChina(count);
                  if (str == "{随机数字}") readstr = GenerateCheckCodeNum(count);
                  if (str == "{随机字母}") readstr = GenerateRandomLetter(count);
                  if (count > readstr.Length) count = readstr.Length;
                  r = new Regex(str.Replace("{", "\\{").Replace("}", "\\}"));
                  for (int i = 0; i < count; i++)
                  {
                      content = r.Replace(content, readstr.Substring(i, 1), 1);
                  }
              }
              return content;
          }
  
  
          /// <summary>
          /// 随机生成字母
          /// </summary>
          /// <param name="Length"></param>
          /// <returns></returns>
          public static string GenerateRandomLetter(int Length)
          {
              char[] Pattern = new char[] { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z' };
              string result = "";
              int n = Pattern.Length;
              Random random = new Random(~unchecked((int)DateTime.Now.Ticks));
              for (int i = 0; i < Length; i++)
              {
                  int rnd = random.Next(0, n);
                  result += Pattern[rnd];
              }
              return result;
          }
  
          /// <summary>
          /// 随机生成数字
          /// </summary>
          /// <param name="codeCount"></param>
          /// <returns></returns>
          public static string GenerateCheckCodeNum(int codeCount)
          {
              int rep = 0;
              string str = string.Empty;
              long num2 = DateTime.Now.Ticks + rep;
              rep++;
              Random random = new Random((int)((ulong)num2 & 0xffffffffL) | (int)(num2 >> rep));
              for (int i = 0; i < codeCount; i++)
              {
                  int num = random.Next();
                  str = str + ((char)(0x30 + (ushort)(num % 10))).ToString();
              }
              return str;
          }
  
          /// <summary>
          /// 此函数为生成指定数目的汉字
          /// </summary>
          /// <param name="charLen">汉字数目</param>
          /// <returns>所有汉字</returns>
          public static string RandChina(int charLen)
          {
              int area, code;//汉字由区位和码位组成(都为0-94,其中区位16-55为一级汉字区,56-87为二级汉字区,1-9为特殊字符区)
              StringBuilder strtem = new StringBuilder();
              Random rand = new Random();
              for (int i = 0; i < charLen; i++)
              {
                  area = rand.Next(16, 88);
                  if (area == 55)//55区只有89个字符
                  {
                      code = rand.Next(1, 90);
                  }
                  else
                  {
                      code = rand.Next(1, 94);
                  }
                  strtem.Append(Encoding.GetEncoding("GB2312").GetString(new byte[] { Convert.ToByte(area + 160), Convert.ToByte(code + 160) }));
              }
              return strtem.ToString();
          }
      }
  }