基于时间刻度的唯一、非重复的字母数字代码

本文关键字:数字 代码 时间刻度 唯一 | 更新日期: 2023-09-27 18:32:09

我有一个从这篇文章中获取的函数,效果很好:

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选择字母数字。这样它就不会重复。我想生成的事务代码中的字符可能需要根据毫秒的长度增加?我希望生成的事务代码的长度是恒定的。希望不超过 8 个字符。

示例:如果刻度恰好是135的(对我来说比现实生活中的更严重),那么生成的代码将是ACEBDF的,具体取决于它是否基于 0(我不在乎它是否是)。

基于时间刻度的唯一、非重复的字母数字代码

我想你真正想要的是一个真正的非重复事务代码或GUID:

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

如果要清理它:

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

生成的输出示例OEndimZwsEKRAbAwnvzjoA但由于替换了+ /=长度可能有点不可预测。

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