ID生成算法类似于youtube的生成

时间:2016-04-09 12:24:50

标签: php algorithm

我正在为民意调查生成随机ID;我已经删除了枚举ID,原因很明显。我已经创建了自己的功能来生成ID,但我不确定它是否非常“优化”,或者我是不是以正确的方式进行。一旦我接近64 ^ 6民意调查(可能永远不会发生),它就会滞后。这很好吗?

function generateID()
{
    $chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-_';
    $id = $this->injectionCSC('$' . substr(str_shuffle($chars), 15, 10), true);

    $link = $this->connect();
    $query = mysqli_query($link, "SELECT * FROM polls WHERE id='$id'");
    if (mysqli_num_rows($query) > 0) {
        $id = $this->generateID();
    }

    return $this->injectionCSC($id, false);
}

$ this-> injectionCSC($ id,false / true);只是摆脱sql注入和html标签的功能。如果我说的正确,这个当前的ID生成函数最多可以保持1.8014399e + 16个民意调查。为了增加金额,我可以更改前面的特殊字符('$')或只添加另一个字符。

1 个答案:

答案 0 :(得分:1)

不使用伪随机数生成器生成唯一ID,而是选择UUID。

str_shuffle实施不同,UUID v4是唯一且极不可能发生冲突。您可以使用ramsey/uuid包来执行此操作。写得很简单:

$uuid4 = (string) Uuid::uuid4(); // something like 16fd2706-8baf-433b-82eb-8c7fada847da

您可以使用base64对原始字节进行编码:

$id = base64_encode(Uuid::uuid4()->getBytes());