gpt4 book ai didi

c# - 如何创建不包含数字的唯一标识符?

转载 作者:行者123 更新时间:2023-11-30 13:13:09 25 4
gpt4 key购买 nike

我希望在 .resx 文件中使用某种唯一标识符,但它不允许 key 以数字开头。我想知道是否有另一种不包含数字或以其他方式满足此要求的替代 UID 类型,而不是循环使用 GUID 直到我得到一个以字母开头的 GUID。

有什么想法吗?

最佳答案

如果您只想创建一个字母开头的 Guid,您可以这样做:

var b = Guid.NewGuid().ToByteArray();
b[3] |= 0xF0;
return new Guid(b);

这将始终生成以十六进制数字 F 开头的 GUID。

要创建一个不包含任何数字的 Guid,您可以使用如下内容:

return new Guid(Guid.NewGuid().ToByteArray()
.Select(b => (byte)(((b % 16) < 10 ? 0xA : b) |
(((b >> 4) < 10 ? 0xA : (b >> 4)) << 4)))
.ToArray());

这将测试每个十六进制数字(每个字节两个)并在小于 A 时将其强制转换为 A


上述两种解决方案都会生成真实的 Guid 对象,尽管添加的限制确实会在某种程度上降低生成的 GUID 的唯一性(在第二个示例中更是如此)。如果您不关心输出是实际的 GUID,您可以简单地将十六进制数字重新映射到其他内容并将结果返回一个字符串,正如其他人所建议的那样。 FWIW,这是我能想到的最短的解决方案:

return String.Concat(Guid.NewGuid().ToString("N").Select(c => (char)(c + 17)));

这将十六进制数字 0 到 9 映射到字符 AJ,以及十六进制数字 A - F 到字符 rw。它还会生成一个没有任何连字符的字符串。例如:

Before: e58d0f329a2f4615b922ecf53dcd090a
After: vFIuAwDCJrCwEGBFsJCCvtwFDutuAJAr

当然,如果您不喜欢这里的混合大小写,您可以将其转换为全部大写或小写。

关于c# - 如何创建不包含数字的唯一标识符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18645672/

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