如何使用C#生成随机字符,我尝试下面的代码,但它不起作用 [英] How To Generate Random Charecters Using C#, I Tried The Code Below But It Doesnt Work

查看:46
本文介绍了如何使用C#生成随机字符,我尝试下面的代码,但它不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

private string GetUniqueKey()
  {
  int maxSize  = 8 ;
  int minSize = 5 ;
  char[] chars = new char[62];
  string a;
  a = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
  chars = a.ToCharArray();
  int size  = maxSize ;
  byte[] data = new byte[1];
  RNGCryptoServiceProvider  crypto = new RNGCryptoServiceProvider();
  crypto.GetNonZeroBytes(data) ;
  size =  maxSize ;
  data = new byte[size];
  crypto.GetNonZeroBytes(data);
  StringBuilder result = new StringBuilder(size) ;
  foreach(byte b in data )
  { result.Append(chars[__b % (chars.Length - )>); }
   return result.ToString();
  }

推荐答案

参见https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx [<一个href =https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx\"target =_ blanktitle =New Window> ^ ] 。生成随机数并将每一个用作可接受字符串的索引:

See https://msdn.microsoft.com/en-us/library/system.random(v=vs.110).aspx[^]. Generate random numbers and use each one as an index into the string of acceptable characters:
string list = "abcdef ... etc"
int index = nextRandom % list.length // i.e. remainder
nextCharacter = list.at(index)
repeat.


使用LINQ,

它将生成5位数的随机字符。

var chars =BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789;

var random = new Random();

var result = new string(

Enumerable.Repeat(chars,5)

.Select(s => s [random.Next(s.Length) )])

.ToArray());
Use LINQ,
It will generate the 5 digit random characters.
var chars ="BCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var random = new Random();
var result = new string(
Enumerable.Repeat(chars, 5)
.Select(s => s[random.Next(s.Length)])
.ToArray());


// use static classes and methods where possible
// Don't use System.Random it is not secure
private static readonly RNGCryptoServiceProvider rngCsp = new RNGCryptoServiceProvider();

private static void Encode(char[] data, char[] lexicon)
{
    //Don't let null values break your code
    if (data == null)
    {
        throw new ArgumentException("data");
    }
    if (lexicon == null)
    {
        throw new ArgumentException("lexicon");
    }
    var randomNumber = new byte[1];
    int size = data.Length;
    //use char[] rather than a string.
    //Strings are not very secure as copies are made in memory each time a string  is changed
    for (int i = 0; i < size; i++)
    {
        //Load random number into buffer.
        //Use methods that return 'void' where possible.
        rngCsp.GetBytes(randomNumber);
        int index = randomNumber[0];
        data[i] = lexicon[index % lexicon.Length];

    }

}

private static void Main(string[] args)
{
    string lexicon = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    int size = 8;
   var data = new char[size];
    Encode(data,lexicon.ToCharArray());
    string password = new string(data);
}


这篇关于如何使用C#生成随机字符,我尝试下面的代码,但它不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆