【发布时间】:2012-04-24 13:38:31
【问题描述】:
我有一个从this post 获取的函数,效果很好:
private string GenerateTransactionCode()
{
var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
var random = new Random();
var result = new string(
Enumerable.Repeat(chars, 8)
.Select(s => s[random.Next(s.Length)])
.ToArray());
return result;
}
我想修改它,使它不是随机的,而是根据DateTime.UtcNow.Ticks 选择字母数字数字。这样就不会重复了。我想可能需要根据毫秒的长度增加生成的 TransactionCode 中的字符?我希望生成的 TransactionCode 的长度保持不变。希望不超过 8 个字符。
示例:如果刻度恰好是135(对我来说比现实生活中更多),那么生成的代码将是ACE 或BDF,这取决于它是否基于0 (我不在乎它是否存在)。
【问题讨论】:
-
滴答声不是不重复的……尤其是在多核上;然而,一个简单的联锁计数器将是......数据库
IDENTITY和Guid(显然是适当构造的) -
我认为你不想这样做。现代 CPU 不仅能够在滴答计数器的分辨率上做不止一件事。请参阅here 了解更多信息。
-
我认为您的示例并不代表您想要的,在这种情况下,只会使用
A到J(除非135不是十进制值)。 -
我在想如果刻度是 135,那么它会从数组中挑选出来。 135是字符“数组”中BDF的索引值