首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成一批随机密码

生成一批随机密码
EN

Stack Overflow用户
提问于 2010-09-28 23:47:39
回答 3查看 668关注 0票数 1

生成随机密码很容易。但是生成一个批处理更加困难。

代码语言:javascript
运行
复制
    public static string getRandomPassword(int letters, int getallen) {
        //int letters = 8;
        //int getallen = 5;

        char[] letterdeel = new char[letters];
        int minGetal = (int)Math.Pow(10, getallen - 1);
        int maxGetal = (int)Math.Pow(10, getallen);

        string password;
        Random r = new Random();
        int test = (int)(DateTime.Now.Ticks);
        for (int i = 0; i < letters; i++) {
            r = new Random((int)(DateTime.Now.Ticks) + i);
            bool capital = r.Next(2) == 0 ? true : false;
            if (capital) {
                letterdeel[i] = (char)r.Next(65, 91);
            } else {
                letterdeel[i] = (char)r.Next(97, 123);
            }
        }

        password = new string(letterdeel);
        password += r.Next(minGetal, maxGetal);

        return password;
    }

这是我的方法,密码应该是一定的字母数字格式。这很好用,但是如果我有一个for循环从这个方法中提取100个密码,在我的数组中我有5-8个相同的密码,然后又有5-8个相同的密码。

我知道这是为什么,因为随机函数和它所依赖的时钟,但是我如何解决这个问题呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-09-28 23:50:38

将随机数生成器定义为函数外部的静态变量。

How can I get true randomness in this class without Thread.Sleep(300)?

票数 2
EN

Stack Overflow用户

发布于 2010-09-28 23:50:20

如果要重复调用Random r,请将其移动到方法外部。你将在相同的相对时间框架内点击它几次,所以你将生成相同的种子。你还想去掉下面这行代码。这是不必要的,而且(再一次),with the nature of DateTime.Now,您将继续生成相同的“随机”数字序列。

代码语言:javascript
运行
复制
r = new Random((int)(DateTime.Now.Ticks) + i); 
票数 5
EN

Stack Overflow用户

发布于 2010-09-28 23:50:12

使用一个集合,而不是你存储的任何集合,不要循环100次,直到集合中有100个项目为止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3814576

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档