我想启用"保存"我的网络应用中的功能。我将数据发送到PHP post接收器,并将数据保存在MySQL行中,所以通常我可以用它的id加载它:
site.com/content/123
但是我想(只是为了看上去好看的)使用" hash" (不确定它是否是正确的术语),例如:
site.com/content/A2w7SqZ
就像jsFiddle一样。如何将id(整数)转换为哈希?
示例: http://jsfiddle.net/sfu24/
我能想到的唯一方法是MD5。但它会生成一个很长的字符串。我认为6个字符绰绰有余。
那么如何制作像jsfiddle这样的哈希系统?
感谢您的帮助!
P.S。我确定这个问题已被问过百万次。但是我无法找到它。如果您知道已经存在的答案,请发布链接,我将删除该问题。
答案 0 :(得分:2)
生成随机字符
function generate_random($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for($i = 0; $i < $length; $i ++) {
$randomString .= $characters [rand ( 0, strlen ( $characters ) - 1 )];
}
return $randomString;
}
答案 1 :(得分:1)
答案 2 :(得分:1)
function generateHash($int) {
$rand_letters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$newstr = '';
for ($i = 0; $i < strlen($int); $i++) {
$newstr .= $rand_letters[rand(0, strlen($rand_letters)-1)];
}
return $newstr;
}
function myHash($int) {
$newstr = generateHash($int);
$result = $db->query("SELECT COUNT(*) FROM hashes WHERE hash = '$newstr';");
if ($result->num_rows > 0) {
myHash($int);
}
return $newstr;
}
echo myHash(973451);
您在传递的整数的长度的基础上生成字符串。这就是generateHash()的作用。 myHash()使用这个字符串,如果它已经存在,再次运行,直到生成not-present字符串,所以返回它。
哈希是随机的,所以它们不是直接可逆的(它们仍然可以),但是“12345”不会每次都产生一个相同的字符串。