我在网上看到如下的字符串哈希码算法,不知道这个算法可能做到任意字符串的返回哈希码都是不同的?
  function   HashCode(s:   string):   Cardinal;  
  var  
      i:   Integer;  
  begin  
      Result   :=   0;  
      for   i   :=   1   to   Length(s)   do
          Result   :=   31   *   Result   +   Ord(s[i]);  
  end;如果有其他更好的请赐教! 谢谢

解决方案 »

  1.   

    在IniFiles单元里有个类叫THashedStringList,如果你不放心网上算法的话,BORLAND给的方法绝对不会有问题了。
      

  2.   

    这哈希算法保证不鸟“任意字符串的返回哈希码都是不同的”
    返回值是 Cardinal,Cardianl的表数范围是0..4294967295
    也就是最多4294967296个不同的值,而对于任意字符串,其组合形式可以是无限的范围。但是,我们可以把字符串,截断成多段,对每段进行哈希,把每段的哈希组合起来就可以扩展了。