我从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
或{{1}取决于它是否基于0(我不关心它是否是)。
答案 0 :(得分:3)
我想你真正想要的是一个真正的非重复交易代码,或GUID:
Guid g = Guid.NewGuid();
string txcode = Convert.ToBase64String(g.ToByteArray());
如果你想清理它:
txcode = txcode.Replace("=","").Replace("+","").Replace("/","");
生成的输出示例为OEndimZwsEKRAbAwnvzjoA
,但由于替换了+
/
和=
,因此长度可能会有些不可预测。
您可能更喜欢这种格式g.ToString("N")
,其格式为58d5381c878b484591568b086296fe8e
,保证长度为32个字符。