在 ASP.NET Core 中生成唯一的随机数

Tai*_*ama 3 random asp.net-mvc entity-framework unique-key asp.net-core

我正在开发一个热点服务,使用 ASP.NET Core 构建 MVC 应用程序,我需要生成一个 6 位数字(100000 到 999999)作为用户连接和访问互联网的密码。该数字在数据库中必须是唯一的,并且在一段时间后(一个月行)它将被删除。

生成这个唯一编号的最佳方法是什么?我也在使用实体框架,想知道这是否可以以某种方式帮助我解决这个问题......

提前致谢!

Chr*_*att 5

嗯,很简单,只需执行以下操作即可:

var rand = new Random();
var uid = rand.Next(100000, 1000000);
Run Code Online (Sandbox Code Playgroud)

但是,确保数据库中唯一性的唯一方法是 1) 查询以确保该值首先不存在(尽管存在并发问题)或 2) 使列唯一,并捕获从约束验证抛出的数据库异常。

简而言之,您必须与数据库配合执行某些操作,以确定它在数据库中是否确实是唯一的。如果池的数量少于一百万,您可能会经常发生冲突。

值得一提的是,正如 @PeterO 指出的那样,这不会是远程安全的。从少于一百万个候选池中暴力破解碰撞是非常容易的。然而,如果您最终仍然得到 6 个字符的数字,那么使用加密 RNG 并没有什么帮助。如何获得随机数并不重要,重要的是该数字的实际随机程度。这里的熵接近于零。