gpt4 book ai didi

.net - 生成人类可读/可用、简短但唯一的 ID

转载 作者:太空狗 更新时间:2023-10-30 01:37:29 26 4
gpt4 key购买 nike

  • 每天需要处理 > 1000 但 < 10000 条新记录

  • 不能使用 GUID/UUID、自动递增数字等。

  • 理想情况下应该是 5 或 6 个字符长,当然可以是 alpha

  • 想要重用现有的、知名的算法(如果可用的话)

有什么东西吗?

最佳答案

tinyurl 和 bit.ly 使用 Base 62 作为缩略网址。这是创建“唯一的”、人类可读的 ID 的一种易于理解的方法。 当然,您必须存储创建的 ID 并在创建时检查重复项以确保唯一性。(请参阅答案底部的代码)

Base 62 唯一性指标

以 62 为基数的 5 个字符将为您提供 62^5 个唯一 ID = 916,132,832(约 10 亿)每天 10,000 个 ID,您可以使用 91,000 天以上

6 个 base 62 字符将为您提供 62^6 个唯一 ID = 56,800,235,584(56+ 十亿)每天 1 万个 ID,你将在 5 亿多天里都没事

Base 36 唯一性指标

6 个字符将为您提供 36^6 个唯一 ID = 2,176,782,336(2+ 十亿)

7 个字符将为您提供 36^7 个唯一 ID = 78,364,164,096(78+ 十亿)

代码:

public void TestRandomIdGenerator()
{
// create five IDs of six, base 62 characters
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase62(6));

// create five IDs of eight base 36 characters
for (int i=0; i<5; i++) Console.WriteLine(RandomIdGenerator.GetBase36(8));
}

public static class RandomIdGenerator
{
private static char[] _base62chars =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
.ToCharArray();

private static Random _random = new Random();

public static string GetBase62(int length)
{
var sb = new StringBuilder(length);

for (int i=0; i<length; i++)
sb.Append(_base62chars[_random.Next(62)]);

return sb.ToString();
}

public static string GetBase36(int length)
{
var sb = new StringBuilder(length);

for (int i=0; i<length; i++)
sb.Append(_base62chars[_random.Next(36)]);

return sb.ToString();
}
}

输出:

z5KyMgwd4SUpuSzQtHUPrGATUIf2ISQCF9GNM50UV3TFSS3MG91VKP7NTRF10TAJK3AJU7

关于.net - 生成人类可读/可用、简短但唯一的 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543715/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com