0

我有一个从这篇文章中获得的功能,效果很好:

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(对我来说比现实生活中更多),那么生成的代码将是ACEBDF取决于它是否基于 0(我不在乎是否是)。

4

1 回答 1

3

我想你真正想要的是一个真正的非重复交易代码,或GUID

Guid g = Guid.NewGuid();
string txcode = Convert.ToBase64String(g.ToByteArray());

如果你想清理它:

txcode = txcode.Replace("=","").Replace("+","").Replace("/","");

生成输出的示例OEndimZwsEKRAbAwnvzjoA但是由于替换+ /=长度可能会稍微不可预测。

您可能更喜欢这种格式g.ToString("N"),它提供类似的58d5381c878b484591568b086296fe8e内容并保证长度为 32 个字符。

于 2012-04-24T13:42:58.320 回答