常见Hash算法

Java代码 复制代码  收藏代码
  1. /*  
  2.  **************************************************************************  
  3.  *                                                                        *  
  4.  *          General Purpose Hash Function Algorithms Library              *  
  5.  *                                                                        *  
  6.  * Author: Arash Partow - 2002                                            *  
  7.  * URL: http://www.partow.net                                             *  
  8.  * URL: http://www.partow.net/programming/hashfunctions/index.html        *  
  9.  *                                                                        *  
  10.  * Copyright notice:                                                      *  
  11.  * Free use of the General Purpose Hash Function Algorithms Library is    *  
  12.  * permitted under the guidelines and in accordance with the most current *  
  13.  * version of the Common Public License.                                  *  
  14.  * http://www.opensource.org/licenses/cpl1.0.php                          *  
  15.  *                                                                        *  
  16.  **************************************************************************  
  17. */  
  18.   
  19.   
  20. class GeneralHashFunctionLibrary   
  21. {   
  22.   
  23.   
  24.    public long RSHash(String str)   
  25.    {   
  26.       int b     = 378551;   
  27.       int a     = 63689;   
  28.       long hash = 0;   
  29.   
  30.       for(int i = 0; i < str.length(); i++)   
  31.       {   
  32.          hash = hash * a + str.charAt(i);   
  33.          a    = a * b;   
  34.       }   
  35.   
  36.       return hash;   
  37.    }   
  38.    /* End Of RS Hash Function */  
  39.   
  40.   
  41.    public long JSHash(String str)   
  42.    {   
  43.       long hash = 1315423911;   
  44.   
  45.       for(int i = 0; i < str.length(); i++)   
  46.       {   
  47.          hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2));   
  48.       }   
  49.   
  50.       return hash;   
  51.    }   
  52.    /* End Of JS Hash Function */  
  53.   
  54.   
  55.    public long PJWHash(String str)   
  56.    {   
  57.       long BitsInUnsignedInt = (long)(4 * 8);   
  58.       long ThreeQuarters     = (long)((BitsInUnsignedInt  * 3) / 4);   
  59.       long OneEighth         = (long)(BitsInUnsignedInt / 8);   
  60.       long HighBits          = (long)(0xFFFFFFFF) << (BitsInUnsignedInt - OneEighth);   
  61.       long hash              = 0;   
  62.       long test              = 0;   
  63.   
  64.       for(int i = 0; i < str.length(); i++)   
  65.       {   
  66.          hash = (hash << OneEighth) + str.charAt(i);   
  67.   
  68.          if((test = hash & HighBits)  != 0)   
  69.          {   
  70.             hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));   
  71.          }   
  72.       }   
  73.   
  74.       return hash;   
  75.    }   
  76.    /* End Of  P. J. Weinberger Hash Function */  
  77.   
  78.   
  79.    public long ELFHash(String str)   
  80.    {   
  81.       long hash = 0;   
  82.       long x    = 0;   
  83.   
  84.       for(int i = 0; i < str.length(); i++)   
  85.       {   
  86.          hash = (hash << 4) + str.charAt(i);   
  87.   
  88.          if((x = hash & 0xF0000000L) != 0)   
  89.          {   
  90.             hash ^= (x >> 24);   
  91.          }   
  92.          hash &= ~x;   
  93.       }   
  94.   
  95.       return hash;   
  96.    }   
  97.    /* End Of ELF Hash Function */  
  98.   
  99.   
  100.    public long BKDRHash(String str)   
  101.    {   
  102.       long seed = 131// 31 131 1313 13131 131313 etc..   
  103.       long hash = 0;   
  104.   
  105.       for(int i = 0; i < str.length(); i++)   
  106.       {   
  107.          hash = (hash * seed) + str.charAt(i);   
  108.       }   
  109.   
  110.       return hash;   
  111.    }   
  112.    /* End Of BKDR Hash Function */  
  113.   
  114.   
  115.    public long SDBMHash(String str)   
  116.    {   
  117.       long hash = 0;   
  118.   
  119.       for(int i = 0; i < str.length(); i++)   
  120.       {   
  121.          hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;   
  122.       }   
  123.   
  124.       return hash;   
  125.    }   
  126.    /* End Of SDBM Hash Function */  
  127.   
  128.   
  129.    public long DJBHash(String str)   
  130.    {   
  131.       long hash = 5381;   
  132.   
  133.       for(int i = 0; i < str.length(); i++)   
  134.       {   
  135.          hash = ((hash << 5) + hash) + str.charAt(i);   
  136.       }   
  137.   
  138.       return hash;   
  139.    }   
  140.    /* End Of DJB Hash Function */  
  141.   
  142.   
  143.    public long DEKHash(String str)   
  144.    {   
  145.       long hash = str.length();   
  146.   
  147.       for(int i = 0; i < str.length(); i++)   
  148.       {   
  149.          hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i);   
  150.       }   
  151.   
  152.       return hash;   
  153.    }   
  154.    /* End Of DEK Hash Function */  
  155.   
  156.   
  157.    public long BPHash(String str)   
  158.    {   
  159.       long hash = 0;   
  160.   
  161.       for(int i = 0; i < str.length(); i++)   
  162.       {   
  163.          hash = hash << 7 ^ str.charAt(i);   
  164.       }   
  165.   
  166.       return hash;   
  167.    }   
  168.    /* End Of BP Hash Function */  
  169.   
  170.   
  171.    public long FNVHash(String str)   
  172.    {   
  173.       long fnv_prime = 0x811C9DC5;   
  174.       long hash = 0;   
  175.   
  176.       for(int i = 0; i < str.length(); i++)   
  177.       {   
  178.       hash *= fnv_prime;   
  179.       hash ^= str.charAt(i);   
  180.       }   
  181.   
  182.       return hash;   
  183.    }   
  184.    /* End Of FNV Hash Function */  
  185.   
  186.   
  187.    public long APHash(String str)   
  188.    {   
  189.       long hash = 0xAAAAAAAA;   
  190.   
  191.       for(int i = 0; i < str.length(); i++)   
  192.       {   
  193.          if ((i & 1) == 0)   
  194.          {   
  195.             hash ^= ((hash << 7) ^ str.charAt(i) * (hash >> 3));   
  196.          }   
  197.          else  
  198.          {   
  199.             hash ^= (~((hash << 11) + str.charAt(i) ^ (hash >> 5)));   
  200.          }   
  201.       }   
  202.   
  203.       return hash;   
  204.    }   
  205.    /* End Of AP Hash Function */  
  206.   
  207. }  

你可能感兴趣的:(hash算法)