PHP Hash算法:Times33算法代码实例

 更新时间:2015年05月13日 09:09:58   投稿:junjie  
这篇文章主要介绍了PHP Hash算法:Times33算法代码实例,本文直接给出实现代码,需要的朋友可以参考下

最近看书,里面提到了一些Hash算法。比较有印象的是Times33,当时理解不是很透测,今天写了段程序来验证了一下。
先上代码:

复制代码 代码如下:

<?php

/**
 * CRC32 Hash function
 * @param $str
 * @return int
 */
function hash32($str)
{
    return crc32($str) >> 16 & 0x7FFFFFFF;
}

/**
 * Times33 Hash function
 * @param $str
 * @return int
 */
function hash33($str)
{
    $hash = 0;
    for($i=0; $i<strlen($str); $i++) {
        $hash += 33 * $hash + ord($str{$i});
    }
    return $hash & 0x7FFFFFFF;
}


$n = 10;

// Test Case 1
$stat = array();
for($i=0; $i<10000; $i++){
    $str = substr(md5(microtime(true)), 0, 8);
    $p = hash32($str) % $n;
    if(isset($stat[$p])){
        $stat[$p]++;
    }else{
        $stat[$p] = 1;
    }
}
print_r($stat);

// Test Case 2
$stat = array();
for($i=0; $i<10000; $i++){
    $str = substr(md5(microtime(true)), 0, 8);
    $p = hash33($str) % $n;
    if(isset($stat[$p])){
        $stat[$p]++;
    }else{
        $stat[$p] = 1;
    }
}
print_r($stat);

以上有两个测试用例。第一个,用CRC32的方法;第二个是Times33的算法实现。

效果:

结果分布,两种算法不相上下(估计是数据源的问题,md5只有0-f)。也有文章说CRC32的分布更均匀(参考链接:)
但耗费时间,CRC32比Times33快将近一倍。

为什么是33?

即是素数(质数),也是奇数。除了33,还有131, 1313, 5381等。PHP内置的Hash函数用的是5381,在“鸟哥”的一篇博文中也有提到。

相关文章

  • php实现监听事件

    php实现监听事件

    本文介绍关于在php实现事件监听与触发实例程序代码
    2013-11-11
  • 在laravel中使用Symfony的Crawler组件分析HTML

    在laravel中使用Symfony的Crawler组件分析HTML

    这篇文章主要介绍了在laravel中使用Symfony的Crawler组件分析HTML,需要的朋友可以参考下
    2017-06-06
  • 2014最热门的24个php类库汇总

    2014最热门的24个php类库汇总

    本文给大家分享24个免费并且高质量的PHP类库,也是2014年比较热门流行的类库,这里推荐给大家。
    2014-12-12
  • PHP常见漏洞攻击分析

    PHP常见漏洞攻击分析

    本文给大家介绍php常见漏洞攻击相关知识,本文介绍的非常详细,具有参考借鉴价值,感兴趣的朋友一起学习吧
    2016-02-02
  • tp5框架无刷新分页实现方法分析

    tp5框架无刷新分页实现方法分析

    这篇文章主要介绍了tp5框架无刷新分页实现方法,结合实例形式分析了thinkPHP5框架无刷新分页相关原理、实现步骤与操作注意事项,需要的朋友可以参考下
    2019-09-09
  • typecho插件编写教程(三):保存配置

    typecho插件编写教程(三):保存配置

    这篇文章主要介绍了typecho插件编写教程(三):保存配置,本文讲解了完善方法、如何保存配置、使用需要注意的问题等内容,需要的朋友可以参考下
    2015-05-05
  • 360搜索引擎自动收录php改写方案

    360搜索引擎自动收录php改写方案

    这篇文章主要介绍了360搜索引擎自动收录php改写方案的相关资料,需要的朋友可以参考下
    2018-04-04
  • tp5框架使用cookie加密算法实现登录功能示例

    tp5框架使用cookie加密算法实现登录功能示例

    这篇文章主要介绍了tp5框架使用cookie加密算法实现登录功能,结合实例形式分析了thinkPHP5使用cookie加密算法的原理及登录功能相关操作技巧,需要的朋友可以参考下
    2020-02-02
  • PHP+MySQL实现在线测试答题实例

    PHP+MySQL实现在线测试答题实例

    本文通过实例主要给大家介绍如何使用jQuery+PHP+MySQL来实现在线测试题,包括动态读取题目,答题完毕后台评分,并返回答题结果,感兴趣的朋友跟随小编一起看看吧
    2020-01-01
  • magento后台无法登录解决办法的两种方法

    magento后台无法登录解决办法的两种方法

    可能很多朋友有同样的经历,magento在服务器中配置域名是可以正常的访问了,但是在本地配置后却无法登录后台,账号密码登录的时候发现出现空白,无法跳转到后台,本文章向大家介绍两种解决本地magento后台无法登录的方法,需要的朋友可以参考下
    2016-12-12

最新评论