基于时间刻度的唯一、非重复的字母数字代码
本文关键字:数字 代码 时间刻度 唯一 | 更新日期: 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
的(对我来说比现实生活中的更严重),那么生成的代码将是ACE
或BDF
的,具体取决于它是否基于 0(我不在乎它是否是)。
我想你真正想要的是一个真正的非重复事务代码或GUID:
Guid g = Guid.NewGuid();
string txcode = Convert.ToBase64String(g.ToByteArray());
如果要清理它:
txcode = txcode.Replace("=","").Replace("+","").Replace("/","");
生成的输出示例OEndimZwsEKRAbAwnvzjoA
但由于替换了+
/
和=
长度可能有点不可预测。
您可能更喜欢这种格式g.ToString("N")
它提供了类似 58d5381c878b484591568b086296fe8e
的内容,并保证长度为 32 个字符。