我正在集成/测试远程 Web 服务,即使它是“QA”端点,它仍然在每个调用上强制使用唯一的电子邮件地址。
我可以想到 DateTime.Now.Ticks
(例如 634970372342724417)和 Guid.NewGuid()
,但这些都不能合并到一封电子邮件中。 20 个字符(或者可以吗?)。
我想将包含最后使用的数字的数字写入文件并使用 email1@x.com、email2@x.com 等...
并不难,但是如果我可以避免持久状态,我总是这样做。
有没有人有技巧或算法可以提供短长度“guid”的东西,它在相当长的时间段(比如一年)内是独一无二的,我可以将其用于最大长度为 20 个字符的电子邮件地址( guid 的最大长度)= 14 = 20 - “@x.com”的长度?
最佳答案
如果您假设您不会在同一个“勾号”处生成两个电子邮件地址,那么您确实可以使用这些勾号来生成一个电子邮件地址。
但是,如果 ticks 是一个 64 位数字,并且您写出该数字,您最终会得到超过 20 个字符。
诀窍是使用不同的方案对 64 位数字进行编码。 假设您可以使用 26 个西文字母 + 10 个数字。这使得 36 个可能的字符。如果取5位,可以表示32个字符。这应该足够了。 取 64 位并将它们分成 5 位组(64/5 大约是 13 组)。将每 5 位转换为一个字符。这样你最终得到 13 个字符,你仍然可以在它前面添加一个字符)。
long ticks = DateTime.Now.Ticks;
byte[] bytes = BitConverter.GetBytes(ticks);
string id = Convert.ToBase64String(bytes)
.Replace('+', '_')
.Replace('/', '-')
.TrimEnd('=');
Console.WriteLine (id);
产量:
Gq1rNzbezwg
关于c# - 生成在合理时间内不重复的唯一编号的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15009423/