【发布时间】:2015-02-07 15:17:49
【问题描述】:
试图在 C# 中复制一些 PHP 代码。 PHP 代码使用 uniqid 函数,将 more entropy 参数设置为 true。知道如何在 C# 中最好地复制它吗?
【问题讨论】:
-
这是否类似于 .NET 术语中的 GUID?
试图在 C# 中复制一些 PHP 代码。 PHP 代码使用 uniqid 函数,将 more entropy 参数设置为 true。知道如何在 C# 中最好地复制它吗?
【问题讨论】:
经过一番谷歌搜索,我发现了 PHP 的 uniqid 是如何工作的,并在 c# 中实现了它:
private string GetUniqID()
{
var ts = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0));
double t = ts.TotalMilliseconds / 1000;
int a = (int)Math.Floor(t);
int b = (int)((t - Math.Floor(t)) * 1000000);
return a.ToString("x8") + b.ToString("x5");
}
这段代码提供了完全相同的结果,唯一的区别是没有实现 uniqid() 的额外参数。
【讨论】:
类似:
string uniqid(string prefix, bool more_entropy) {
if(string.IsNullOrEmpty(prefix))
prefix = string.Empty;
if (!more_entropy) {
return (prefix + System.Guid.NewGuid().ToString()).Left(13);
} else {
return (prefix + System.Guid.NewGuid().ToString() + System.Guid.NewGuid().ToString()).Left(23);
}
}
编辑:反映 cmets
这是一个非常简单的我想不到的解决方案,我建议对于更严格的解决方案,您应该研究适当的“随机”数生成,例如通过 System.数学命名空间直接。请参阅这些其他SO questions and answers on random number generation。
System.Guid.NewGuid().ToString()
会给你一个唯一的字符串。
【讨论】: