Vla*_*lad 51
.NET字符串对象具有GetHashCode()函数.它返回一个整数.将其转换为十六进制,然后转换为8个字符长的字符串.
像这样:
string hashCode = String.Format("{0:X}", sourceString.GetHashCode());
Run Code Online (Sandbox Code Playgroud)
更多内容:http://msdn.microsoft.com/en-us/library/system.string.gethashcode.aspx
更新:在上面的链接中添加了对此答案的评论:
GetHashCode的行为取决于其实现,该实现可能从公共语言运行库的一个版本更改为另一个版本.可能发生这种情况的原因是为了提高GetHashCode的性能.
如果两个字符串对象相等,则GetHashCode方法返回相同的值.但是,每个唯一字符串值都没有唯一的哈希码值.不同的字符串可以返回相同的哈希码.
来电者须知
GetHashCode返回的值取决于平台.它在32位和64位版本的.NET Framework上有所不同.
Sco*_*ski 35
您的目标是创建URL缩短器还是创建哈希函数?
如果您的目标是创建URL缩短器,那么您不需要哈希函数.在这种情况下,您只需要预先生成一系列加密安全随机数,然后将每个要编码的URL分配给序列中的唯一编号.
您可以使用以下代码执行此操作:
using System.Security.Cryptography;
const int numberOfNumbersNeeded = 100;
const int numberOfBytesNeeded = 8;
var randomGen = RandomNumberGenerator.Create();
for (int i = 0; i < numberOfNumbersNeeded; ++i)
{
var bytes = new Byte[numberOfBytesNeeded];
randomGen.GetBytes(bytes);
}
Run Code Online (Sandbox Code Playgroud)
使用加密数字生成器将使人们很难预测您生成的字符串,我认为这对您很重要.
然后,您可以使用字母表中的字符将8字节随机数转换为字符串.这基本上是基础计算的变化(从基数256到基数62).
jör*_*örg 16
我不认为URL缩短服务使用哈希值,我认为它们只有一个运行的字母数字字符串,每个新URL都会增加并存储在数据库中.如果你真的需要使用哈希函数看一下这个链接:一些哈希函数 还有一点offtopic但是根据你正在做的事情这可能很有趣:Coding Horror article
Kin*_*tor 12
只需使用条目ID的Base36(不区分大小写)或Base64.
所以,假设我想使用Base36:
(ID - Base36)
1 - 1
2 - 2
3 - 3
10 - A
11 - B
12 - C
...
10000 - 7PS
22000 - GZ4
34000 - Q8C
...
1000000 - LFLS
2345000 - 1E9EW
6000000 - 3KLMO
如果你使用base64,你可以保持这些更短但后面的URL将区分大小写.你可以看到你仍然得到你漂亮,整洁的字母数字键,并保证不会发生碰撞!
首先,我得到一个随机不同数字的列表。然后我char
从基本字符串中选择每个,追加并返回结果。我选择 5 个字符,这将相当于基于 62 的 6471002 个排列。第二部分是检查数据库以查看是否存在,如果不保存短网址。
const string BaseUrlChars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
private static string ShortUrl
{
get
{
const int numberOfCharsToSelect = 5;
int maxNumber = BaseUrlChars.Length;
var rnd = new Random();
var numList = new List<int>();
for (int i = 0; i < numberOfCharsToSelect; i++)
numList.Add(rnd.Next(maxNumber));
return numList.Aggregate(string.Empty, (current, num) => current + BaseUrlChars.Substring(num, 1));
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
53529 次 |
最近记录: |