str*_*per 57 .net c# asp.net uniqueidentifier
我是大学生,我们的任务是创建一个搜索引擎.当添加到边界时,我很难生成分配给每个URL的唯一ID.我曾尝试使用SHA-256哈希算法以及Guid.这是我用来实现guid的代码:
public string generateID(string url_add)
{
long i = 1;
foreach (byte b in Guid.NewGuid().ToByteArray())
{
i *= ((int)b + 1);
}
string number = String.Format("{0:d9}", (DateTime.Now.Ticks / 10) % 1000000000);
return number;
}
Run Code Online (Sandbox Code Playgroud)
Jai*_*res 83
为什么不使用ToString?
public string generateID()
{
return Guid.NewGuid().ToString("N");
}
Run Code Online (Sandbox Code Playgroud)
如果您希望它基于URL,您可以简单地执行以下操作:
public string generateID(string sourceUrl)
{
return string.Format("{0}_{1:N}", sourceUrl, Guid.NewGuid());
}
Run Code Online (Sandbox Code Playgroud)
如果你想隐藏URL,可以在sourceURL上使用某种形式的SHA1,但我不确定它可能会实现什么.
aba*_*hev 24
为什么不使用GUID?
Guid guid = Guid.NewGuid();
string str = guid.ToString();
Run Code Online (Sandbox Code Playgroud)
Ash*_*Ali 14
这是一个像"id-generator"这样的"YouTube-video-id",例如"UcBKmq2XE5a"
StringBuilder builder = new StringBuilder();
Enumerable
.Range(65, 26)
.Select(e => ((char)e).ToString())
.Concat(Enumerable.Range(97, 26).Select(e => ((char)e).ToString()))
.Concat(Enumerable.Range(0, 10).Select(e => e.ToString()))
.OrderBy(e => Guid.NewGuid())
.Take(11)
.ToList().ForEach(e => builder.Append(e));
string id = builder.ToString();
Run Code Online (Sandbox Code Playgroud)
它创建大小为11个字符的随机ID.您也可以增加/减少它,只需更改Take方法的参数即可.
1亿份中0.001%重复.
为什么我们不能创建一个唯一的 id,如下所示。
我们可以使用 DateTime.Now.Ticks 和 Guid.NewGuid().ToString() 组合在一起,形成一个唯一的 id。
添加 DateTime.Now.Ticks 后,我们可以找出创建唯一 id 的日期和时间(以秒为单位)。
请看代码。
var ticks = DateTime.Now.Ticks;
var guid = Guid.NewGuid().ToString();
var uniqueSessionId = ticks.ToString() +'-'+ guid; //guid created by combining ticks and guid
var datetime = new DateTime(ticks);//for checking purpose
var datetimenow = DateTime.Now; //both these date times are different.
Run Code Online (Sandbox Code Playgroud)
我们甚至可以在唯一 id 中提取刻度部分,然后检查日期和时间以供将来参考。
这个问题似乎已经得到解答,但是为了完整起见,我会添加另一种方法。
您可以使用基于 Twitter 的Snowflake id 生成器的唯一 ID 号生成器。C# 实现可以在这里找到。
var id64Generator = new Id64Generator();
// ...
public string generateID(string sourceUrl)
{
return string.Format("{0}_{1}", sourceUrl, id64Generator.GenerateId());
}
Run Code Online (Sandbox Code Playgroud)
请注意,该方法的一个非常好的功能是可以在独立节点上拥有多个生成器(可能对搜索引擎有用)生成实时的全局唯一标识符。
// node 0
var id64Generator = new Id64Generator(0);
// node 1
var id64Generator = new Id64Generator(1);
// ... node 10
var id64Generator = new Id64Generator(10);
Run Code Online (Sandbox Code Playgroud)
如果你想使用 sha-256(guid 会更快),那么你需要做类似的事情
SHA256 shaAlgorithm = new SHA256Managed();
byte[] shaDigest = shaAlgorithm.ComputeHash(ASCIIEncoding.ASCII.GetBytes(url));
return BitConverter.ToString(shaDigest);
Run Code Online (Sandbox Code Playgroud)
当然,它不必是ascii,也可以是任何其他类型的散列算法
| 归档时间: |
|
| 查看次数: |
178061 次 |
| 最近记录: |