挑战高分: C# 怎么把一组任意字符串哈希成10位数字
static int StringToHash(string InStr){
int nHashResult = 0;
/* 请问这里应该怎么写*/
//
//
//
//
return nHashResult;
}
static void Main(string[] args)
{
string strUniFile = "";
int nHash = 0;
Console.WriteLine("Please Enter DirFile:");
strUniFile = Console.ReadLine();
//strUniFile = strUniFile.Replace('\\', '/');
strUniFile = d:\Sybase\a.dat
nHash = StringToHash(strUniFile);
Console.WriteLine("This is Hash Result:{0}", nHash);
Console.ReadKey();
} --------------------编程问答-------------------- InStr.GetHashCode() --------------------编程问答-------------------- "abcdefg".GetHashCode();
"abcdefg".GetHashCode().ToString("D10"); --------------------编程问答-------------------- 这问题也太弱了吧。无非是需要你自己设计一套hash的规则而已,你想怎么定就怎么定呀。
--------------------编程问答-------------------- 好的hash算法满足以下几个条件:很低的碰撞概率,也就是生产工况下随便2个不同的数据碰巧hash相同的几率要低;雪崩特性,也就是数据中一点微小的改变使得hash的值发生很大的变化;均匀的分布,当数据量比hash长度高出很多,碰撞不可避免的时候,hash碰撞是均匀的;算法的简洁、高效,比如说占用内存足够少、只需要一次顺序访问就可以求出,等等。
为此,我建议你使用标准的hash算法,比如sha或者md4/md5等等,然后截取你需要的尾数转换为10位数字。(顺便说下,如果你需要的数字大于标准算法产生的hash长度,你也可以使用变形算法,组合使用多个算法,或者用salt重复运算,并且拼接起来) --------------------编程问答-------------------- 楼上的回复的很精准啊
补充:.NET技术 , C#