DJBX33A 哈希函数又叫做time33 哈希函数,PHP、Perl、Apache中都是用该方法做为其哈希函数的实现。
本文就对该哈希函数做一简单的介绍,并用Bash对其进行实现。
该方法十分简单,将字符串中的每个字符的ascii码迭代*33加在一起即可。即hash(i)=hash(i-1)*33+ascii(i)。
假如字符串为:abc,则结果就是hashCode=(ascii(a)*33+ascii(b))*33+ascii(c)
PHP中的实现见博客:PHP中的hash函数实现
本文使用Bash实现该hash函数,代码如下:
#!/home/admin/bin/bash_bin/bash_4
declare -A HashAsciiTable;
for c in {a..z} {A..Z}
do
HashAsciiTable[$c]=`printf "%d" "'$c"`;
done
function hash {
inputStr=$1
strLength=${#inputStr};
hashValue=5381;
for((i=0;i<strLength;i++))
do
char=${inputStr:$i:1};
code=0;
if [ -n ${HashAsciiTable[$char]} ]; then
code=${HashAsciiTable[$char]};
fi
hashValue=$((code+hashValue*33));
done
eval $2=$hashValue;
}
## call the hash function
hash "abcdefasdff2123as" hashCode;
## echo the hash code for input string
echo $hashCode
结果为:1294730825853141650

本文介绍了DJBX33A哈希函数的基本原理及其在PHP、Perl、Apache等软件中的应用。通过一个简单的Bash脚本实现了该哈希函数,并给出一个具体的例子。
878

被折叠的 条评论
为什么被折叠?



