PHP Hash算法:Times33算法代码实例
发布:smiling 来源: PHP粉丝网 添加日期:2021-05-26 17:14:57 浏览: 评论:0
这篇文章主要介绍了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,在“鸟哥”的一篇博文中也有提到。
Tags: Hash Times33
- 上一篇:你应该知道PHP浮点数知识
- 下一篇:如何在HTML 中嵌入 PHP 代码
相关文章
- ·利用PHP实现Hash表功能(2015-12-12)
- ·如何使用hash check来检查当前密码?(Laravel 5.3中)(2020-02-07)
- ·php中hashtable实现示例分享(2020-09-09)
- ·php的hash算法介绍(2020-09-09)
- ·PHP中对各种加密算法、Hash算法的速度测试对比代码(2021-03-14)
- ·memcache一致性hash的php实现方法(2021-05-15)
- ·PHP利用hash冲突漏洞进行DDoS攻击的方法分析(2021-05-18)
- ·PHP实现的一致性HASH算法示例(2021-09-05)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)