KiMoGiGi 技术文集

不在乎选择什么,而在乎坚持多久……

IT博客 首页 联系 聚合 管理
  185 Posts :: 14 Stories :: 48 Comments :: 0 Trackbacks

摘至:http://www.cnblogs.com/nclly/archive/2008/12/19/1357961.html


///<summary>
///得到随机字符.
///</summary>
///<param name="intLength">Length of the int.</param>
///<param name="booNumber">if set to <c>true</c> [boo number].</param>
///<param name="booSign">if set to <c>true</c> [boo sign].</param>
///<param name="booSmallword">if set to <c>true</c> [boo smallword].</param>
///<param name="booBigword">if set to <c>true</c> [boo bigword].</param>
///<returns></returns>
public string getRandomizer(int intLength, bool booNumber, bool booSign, bool booSmallword, bool booBigword)
{
 //定义
 Random ranA = new Random();
 int intResultRound = 0;
 int intA = 0;
 string strB = "";
 while (intResultRound < intLength)
 {
  //生成随机数A,表示生成类型
  //1=数字,2=符号,3=小写字母,4=大写字母
  intA = ranA.Next(1, 5);
  //如果随机数A=1,则运行生成数字
  //生成随机数A,范围在0-10
  //把随机数A,转成字符
  //生成完,位数+1,字符串累加,结束本次循环
  if (intA == 1 && booNumber)
  {
   intA = ranA.Next(0, 10);
   strB = intA.ToString() + strB;
   intResultRound = intResultRound + 1;
   continue;
  }
  //如果随机数A=2,则运行生成符号
  //生成随机数A,表示生成值域
  //1:33-47值域,2:58-64值域,3:91-96值域,4:123-126值域
  if (intA == 2 && booSign == true)
  {
   intA = ranA.Next(1, 5);
   //如果A=1
   //生成随机数A,33-47的Ascii码
   //把随机数A,转成字符
   //生成完,位数+1,字符串累加,结束本次循环
   if (intA == 1)
   {
    intA = ranA.Next(33, 48);
    strB = ((char)intA).ToString() + strB;
    intResultRound = intResultRound + 1;
    continue;
   }

   //如果A=2
   //生成随机数A,58-64的Ascii码
   //把随机数A,转成字符
   //生成完,位数+1,字符串累加,结束本次循环
   if (intA == 2)
   {
    intA = ranA.Next(58, 65);
    strB = ((char)intA).ToString() + strB;
    intResultRound = intResultRound + 1;
    continue;
   }

   //如果A=3
   //生成随机数A,91-96的Ascii码
   //把随机数A,转成字符
   //生成完,位数+1,字符串累加,结束本次循环
   if (intA == 3)
   {
    intA = ranA.Next(91, 97);
    strB = ((char)intA).ToString() + strB;
    intResultRound = intResultRound + 1;
    continue;
   }

   //如果A=4
   //生成随机数A,123-126的Ascii码
   //把随机数A,转成字符
   //生成完,位数+1,字符串累加,结束本次循环
   if (intA == 4)
   {
    intA = ranA.Next(123, 127);
    strB = ((char)intA).ToString() + strB;
    intResultRound = intResultRound + 1;
    continue;
   }
  }

  //如果随机数A=3,则运行生成小写字母
  //生成随机数A,范围在97-122
  //把随机数A,转成字符
  //生成完,位数+1,字符串累加,结束本次循环
  if (intA == 3 && booSmallword == true)
  {
   intA = ranA.Next(97, 123);
   strB = ((char)intA).ToString() + strB;
   intResultRound = intResultRound + 1;
   continue;
  }

  //如果随机数A=4,则运行生成大写字母
  //生成随机数A,范围在65-90
  //把随机数A,转成字符
  //生成完,位数+1,字符串累加,结束本次循环
  if (intA == 4 && booBigword == true)
  {
   intA = ranA.Next(65, 89);
   strB = ((char)intA).ToString() + strB;
   intResultRound = intResultRound + 1;
   continue;
  }
 }
 return strB;
}

//随机字符串生成器的主要功能如下:
//1、支持自定义字符串长度
//2、支持自定义是否包含数字
//3、支持自定义是否包含小写字母
//4、支持自定义是否包含大写字母
//5、支持自定义是否包含特殊符号
//6、支持自定义字符集

///<summary>
///生成随机字符串
///</summary>
///<param name="length">目标字符串的长度</param>
///<param name="useNum">是否包含数字,1=包含,默认为包含</param>
///<param name="useLow">是否包含小写字母,1=包含,默认为包含</param>
///<param name="useUpp">是否包含大写字母,1=包含,默认为包含</param>
///<param name="useSpe">是否包含特殊字符,1=包含,默认为不包含</param>
///<param name="custom">要包含的自定义字符,直接输入要包含的字符列表</param>
///<returns>指定长度的随机字符串</returns>
public string GetRnd(int length, bool useNum, bool useLow, bool useUpp, bool useSpe, string custom)
{
 byte[] b = new byte[4];
 new System.Security.Cryptography.RNGCryptoServiceProvider().GetBytes(b);
 Random r = new Random(BitConverter.ToInt32(b, 0));
 string s = null, str = custom;
 if (useNum == true) { str += "0123456789"; }
 if (useLow == true) { str += "abcdefghijklmnopqrstuvwxyz"; }
 if (useUpp == true) { str += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; }
 if (useSpe == true) { str += "!\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~"; }
 for (int i = 0; i < length; i++)
 {
  s += str.Substring(r.Next(0, str.Length - 1), 1);
 }
 return s;
}

posted on 2009-05-12 10:30 KiMoGiGi 阅读(4630) 评论(0)  编辑 收藏 引用 所属分类: C# / Winforms
只有注册用户登录后才能发表评论。