C# 基于时间刻度的唯一、不重复的字母数字代码
我有一个我从中获得的功能,非常有用:C# 基于时间刻度的唯一、不重复的字母数字代码,c#,linq,random,C#,Linq,Random,我有一个我从中获得的功能,非常有用: private string GenerateTransactionCode() { var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; var random = new Random(); var result = new string( Enumerable.Repeat(chars, 8) .Select(s => s[
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(我不在乎它是否是) 我想您真正想要的是一个真正的非重复事务代码,或者:
如果要清理它,请执行以下操作:
txcode = txcode.Replace("=","").Replace("+","").Replace("/","");
生成的输出示例为OEndimZwsEKRAbAwnvzjoA
,但由于替换了+
/
和=
,长度可能会稍微不可预测
您可能更喜欢这种格式
g.ToString(“N”)
,它提供类似于58d5381c878b484591568b086296fe8e
,并且保证长度为32个字符。我想您实际上想要的是一个真正的不重复事务代码,或者:
如果要清理它,请执行以下操作:
txcode = txcode.Replace("=","").Replace("+","").Replace("/","");
生成的输出示例为OEndimZwsEKRAbAwnvzjoA
,但由于替换了+
/
和=
,长度可能会稍微不可预测
您可能更喜欢这种格式
g.ToString(“N”)
,它提供类似于58d5381c878b484591568b086296fe8e
,并且保证长度为32个字符。勾号不是不重复的。。。特别是多核;然而,一个简单的联锁计数器将是。。。正如数据库标识
,以及Guid
(显然,构造适当)一样,我认为您不想这样做。现代CPU在滴答计数器的分辨率方面能够做不止一件事。有关更多信息,请参阅。我认为您的示例并不代表您想要的内容,在这种情况下,只会使用A
到J
(除非135
不是十进制值)。我在想,如果记号是135,那么它会从数组中选择它。135是字符中BDF的索引值“数组”标记不是非重复的。。。特别是多核;然而,一个简单的联锁计数器将是。。。正如数据库标识
,以及Guid
(显然,构造适当)一样,我认为您不想这样做。现代CPU在滴答计数器的分辨率方面能够做不止一件事。有关更多信息,请参阅。我认为您的示例并不代表您想要的内容,在这种情况下,只会使用A
到J
(除非135
不是十进制值)。我在想,如果记号是135,那么它会从数组中选择它。135是字符“数组”中BDF的索引值。长度是否恒定?如果不是,我可以这样做吗?长度是恒定的吗?如果没有,我可以这样做吗?