好吧,我需要使用唯一的文件名保存图像,并将文件名存储在数据库中。我曾经做过MD5哈希并用hash获得的值的文件名保存图像。
但是我想将不必要的空间使用量从32个字符减少到10-12个字符。
我不想将获得的md5哈希子行()设为12个字符。
有没有办法创建10-12个字符的自定义哈希?
答案 0 :(得分:2)
使用以下函数Tempnam
怎么样?http://php.net/manual/en/function.tempnam.php
“在指定目录中创建具有唯一文件名且访问权限设置为0600的文件。如果该目录不存在,tempnam()
可能会在系统的临时目录中生成一个文件,并返回名称那个。“
答案 1 :(得分:1)
也许使用CRC32而不是MD5?它是8个字符,而不是32个字符,但它更接近你的目标。
答案 2 :(得分:1)
PHP's Hash message digest framework提供了大量的哈希算法。玩得开心!
确定每个哈希的长度see Wikipedia。
答案 3 :(得分:1)
CRC32长度为8个ASCII字符。
答案 4 :(得分:1)
您可以用16个字符(每个字符8位而不是4个字符)表示128位MD5哈希值。
答案 5 :(得分:0)
我做了这个简单的哈希函数,以使用自定义字符和大小创建自己的哈希
function simple_hash($str, $size=5, $characters='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
$hash_array = array();
$hash = '';
for($i=0;$i<$size;$i++){
$hash_array[$i]=0;
}
for($s=0;$s<strlen($str);$s++){
for($i=0;$i<$size;$i++){
$hash_array[$i]=($hash_array[$i]+ord($str[$s])+$i+$s+$size)%strlen($characters);
}
}
for($i=0;$i<$size;$i++){
$hash .= $characters[$hash_array[$i]];
}
return $hash;
}
使用方法:
<?=simple_hash('test')?> // EIMQU
<?=simple_hash('test')?> // EIMQU
<?=simple_hash('test',10)?> // Y26aeimquy
<?=simple_hash('test',10)?> // Y26aeimquy
<?=simple_hash('test',10,'abcdefghijkl')?> // cgkcgkcgkc
<?=simple_hash('test',10,'abcdeABCDE')?> // eDcBaeDcBa
<?=simple_hash('test2')?> // BGLQV
<?=simple_hash('test3')?> // CHMRW
<?=simple_hash('a big string')?> // gsEQ2
<?=simple_hash('Ελληνικά')?> // 0gwM2
<?=simple_hash('Ελληνικα')?> // 5lBR7