Php 如何生成最多9位无字符的uniqId

Php 如何生成最多9位无字符的uniqId,php,random,timestamp,Php,Random,Timestamp,我想根据时间戳生成一个唯一的数字。 在24小时内,每个请求必须有一个与所有其他请求不同的唯一编号 有什么办法可以生成它吗?比如说,最多9位数字?您可以使用 echo rand(1,999999999);die; 但9位数的唯一编号是不够的,这取决于您要生成的唯一密钥的数量。有两种全局类型的解决方案: 将所有唯一ID存储在一个位置,并在那里生成/增加它们。最佳示例:将请求存储在索引为autoincrement的(MySQL)数据库中 另一种解决方案是尝试基于微时间计算唯一ID。作为此选项的示例,

我想根据时间戳生成一个唯一的数字。
在24小时内,每个请求必须有一个与所有其他请求不同的唯一编号

有什么办法可以生成它吗?比如说,最多9位数字?

您可以使用

echo rand(1,999999999);die;

但9位数的唯一编号是不够的,这取决于您要生成的唯一密钥的数量。

有两种全局类型的解决方案:

  • 将所有唯一ID存储在一个位置,并在那里生成/增加它们。最佳示例:将请求存储在索引为autoincrement的(MySQL)数据库中

  • 另一种解决方案是尝试基于微时间计算唯一ID。作为此选项的示例,我们可以直接使用:

    filter_var($_SERVER['REQUEST_TIME_FLOAT'], FILTER_SANITIZE_NUMBER_INT);
    
    它将在字符串中返回9-13个字符,或者我们可以使用PHP的

    获取基于当前时间的前缀唯一标识符 微秒

    由于它基于微时间,因此返回值的长度为13个字符

    如果您希望它更独特,也可以通过以下方式使用前缀:

    $my_id = uniqid( $_SERVER['REMOTE_ADDR'] );
    
    但是比返回值要长


  • 如果您可以将速率限制为每毫秒一个请求,则可以使用“hhmmsmil”。这是九位数字。如果你不将它与同一时间窗口中使用的所有其他数字进行比较,你就不能真正确定你是否有一个唯一的数字,除非你按照Thilo的建议限制你的请求(但这可能取决于你的情况)。为什么只有数字?为什么是9位数?如果您想要一个唯一的值,那么最好使用大型随机值,base64编码以便于携带。请澄清一下,为什么您希望唯一的数字基于
    时间戳
    ?你知道,现在的时间戳已经有10位数了…@茄子:10位数也可以,我想随机!=唯一的另外,你应该使用
    mt_rand()
    ,而不是
    rand()
    。这就是为什么我说这取决于你想使用unique的上下文。为什么投反对票?问题是关于一个唯一的数字。你的答案会产生一个随机数。这个答案没有用。如果您需要更多信息,请在回答之前使用注释。
    mt_rand()
    使用,而
    rand()
    使用。前者几乎在所有方面都更好。
    uniqid
    提供了一个可以包含字符的唯一id。。。我只需要数字
    $my_id = uniqid( $_SERVER['REMOTE_ADDR'] );