当前位置:编程学习 > C#/ASP.NET >>

挑战高分: 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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,