由数字加密的字母的短组合

时间:2013-07-07 18:44:21

标签: php

我正在研究一个小小的琐事,你可以用你自己的问题和答案进行自己的测验。我想为每个游戏制作一个URL(game.xx / QfsNS),而不是使用仅仅是自动增量id的游戏的id,我想要一个组合字母,就像你缩短网址一样。

我尝试过SHA-1,但它太长了,而且不一定非常复杂。

我该怎么办?

5 个答案:

答案 0 :(得分:1)

最好使用像Yourls这样的脚本 - http://yourls.org/

这将生成您正在寻找的“短网址样式”链接。您不必担心冲突,或者您的算法是否足够随意。

将游戏的“长”网址传递给游戏 - 比如game.xx / game / football / etc / somthing / 98765432,它会缩短到game.xx / 123abc

答案 1 :(得分:1)

每次需要新的permid时,您需要验证db表中的唯一性。

例如,创建一个名为get_unique_permid()的函数,它看起来像这样:

function get_unique_permid() {
   while (true) {
      $newid = random_string();
      $res = mysql_query("SELECT permid FROM mytable WHERE permid = '$newid'");
      if (mysql_num_rows($res) == 0) break;  // it wasn't in the table, its good
   }

   return $newid;
}

注意我正在使用Angy Gee的random_string函数代码,在本文中列出。此函数将不断循环,测试随机字符串,直到找到一个尚未存在于表中的字符串。它可能只需要偶尔尝试一次,可能两次甚至3次,具体取决于您的项目的受欢迎程度。

我想如果它超级流行,它甚至可以循环10次或更多次。但至少它保证了permid的独特性。

答案 2 :(得分:0)

如果您将测验存储在数据库中,这可能会有所帮助,但这并不好,但它有效:

function random_string($length=6){
    $str = "";
    $characters = array('B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z','b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','0','1','2','3','4','5','6','7','8','9');
    $max = count($characters) - 1;
    for ($i = 0; $i < $length; $i++){
        $rand = rand(0, $max);
        $str .= $characters[$rand];
    }

    return $str;
}

答案 3 :(得分:0)

更短和更好的随机化:

function random_string($length = 6) {
    $str = '';
    $characters = array_merge(range('A','Z'), range('a','z'), range('0','9'));
    $max = count($characters) - 1;

    for ($i = 0; $i < $length; $i+=1) {
        $rand = mt_rand(0, $max);
        $str .= $characters[$rand];
    }

    return $str;
}

或者,您也可以生成MD5-Hash(或任何其他算法)并缩短它:

echo substr(md5(time()), 0, 6);

最重要的部分是检查“ID”是否已经存在(碰撞)。生成过程并不那么难。

您必须遍历所有数据库条目,只要生成的“ID”存在,并且在您找到唯一“ID”时,请立即插入条目。

答案 4 :(得分:0)

您可以根据测验的ID编写自己的哈希算法。如果写得恰当,它将保证唯一性。