【发布时间】:2011-08-19 02:26:29
【问题描述】:
我需要生成一个九位数字代码(最好是随机的),该代码对于给定的日期是唯一的(同一天不能再次生成相同的数字)。我正在考虑使用 HHMMSSmmm(小时、分钟、秒和毫秒)来生成唯一代码,但并不是真正随机的。这个代码生成方法可以同时被多个方法访问,所以我必须锁定这个方法。但这是否会确保数字是唯一的,因为数字生成可能需要不到一毫秒的时间并且两个线程会获得相同的数字?
有没有更好的方法来生成一个随机的唯一数字代码,该代码在给定日期是唯一的?位数可以是6到9位。
编辑:要生成的随机数的数量取决于交易的数量。最初这个数字可能会较低,但在一段时间内它可能会变得非常高(每秒多个事务)。因此,我不想将数字与已用列表进行比较,因为这可能会出现性能问题。
需要随机性,因为此号码将由用户在手机上输入。这个号码是连接在线交易和电话交易的唯一方法,所以我不希望用户错误地输入不同的号码。
随机数生成需要在 ASP.NET MVC 应用程序中进行。
【问题讨论】:
-
@achinth 他们必须是数字吗?
-
常规 System.Guid 不行吗?
-
您忽略了一个关键信息:您每天要创建多少个这些独特的 9 位随机数?因为如果您每天要创建两个或三个,这比你创造两千万要容易得多。如果你每天创造一万亿,那么问题就无法解决;没有那么多可用的九位数字。 (巧合的是,我经常把你的问题当作面试问题来问;令人震惊的是,有多少候选人从没想过要问他们正在处理多少个数字。)
-
您能否描述一下为什么“随机性”很重要?某些东西“随机”有很多不同的原因,每个原因都对随机生成器提出了不同的要求。例如,密码随机性与伪随机性非常不同。出于安全原因,您真的需要不可预测性吗?
-
@Joan:我不再经常使用这个问题,所以我可能会在某个时候写博客。我有一小部分我喜欢使用的问题,具体取决于职位的级别。