创建不是正常意义上的 GUID/UUID 的复杂 UID

本文关键字:GUID 复杂 UID UUID 意义上 创建 | 更新日期: 2023-09-27 18:30:56

我正在寻找创建递增ID的建议(很像车牌号)。而不是通常的 0-9 int32 类型计数器,我正在寻找的东西可以去 0-9 然后序列中每个字符的 A-Z。

所以我有可能有一个 6 个字符的 ID,这将是"2A3DC3"这有可能为可用值提供更大的深度。

创建不是正常意义上的 GUID/UUID 的复杂 UID

您可以创建一个自动递增的Int32 ID,然后将其格式化为大于 10 的基数以获得短字符串。例如,看看Base36(维基百科有用于编码和解码的C#代码),Base32(ZBase32是专门为人类消费而设计的),甚至是Excel列名。

下面是一些按顺序执行的代码:

var allDigits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var @base = allDigits.Length;
var a = new StringBuilder();
var start = 2176782336;  // minimum 6 digit base36 number
var end = 76187381759;   // maximum 6 digit base36 number
Enumerable.Range(1, 1000)
          .Select(n => {
                           int r;
                           var d = n + start;
                           a.Clear();
                           do
                           {
                               r = (int)(d % @base);
                               d = d / @base;
                               a.Insert(0, allDigits[r]);
                           } while(d >= @base);
                           a.Insert(0, allDigits[r]);
                           return a.ToString();
                       })
          .Dump();