PHP中的短唯一标识符字符串

时间:2018-02-07 10:30:12

标签: php

我正在尝试在PHP中创建一个唯一的发票ID,目前正在执行以下操作:

md5(time().$userId);

我可能有并发用户,所以我也添加用户ID以确保它是唯一的,但是md5散列是32个字符长,有没有办法限制输出短(例如,8-10个字符,如果可能的话)同时确保独特性?

注意:输出字符必须相同,因此,只是将用户ID与时间相关联实际上并不是我正在寻找的,因为用户ID可以是可变长度,例如:5,20或100.

2 个答案:

答案 0 :(得分:0)

有几种方法可以确保uniqunes

time()可以正常使用,因为您将其与$userId连接起来。

您可以使用substr仅获取字符串的一部分。

话虽如此,还有其他方法可以在php中获取唯一的字符串

我发现自己经常使用的是openssl_random_pseudo_bytes()。请注意pseudo,它并非完全随机。

您可以像bin2hex(openssl_random_pseudo_bytes(2))一样使用它,其中2 bytes 的长度,因此它将等于4个字符。

如果您通过urandom访问Linux,也可以使用exec,或者更好,请使用fread

虽然它比伪方法更好,但仅限于操作系统。

uniqid也可以。

如果你真的想要一些真正随机的东西,我建议https://www.random.org/

  

随机性来自大气噪声

他们有一个可以使用的API。

random_bytes(正如@deceze所建议的)也可以正常工作,请注意它仅适用于PHP> 7

选择你的毒药。

答案 1 :(得分:-1)

如果我想这样做,请使用$ userId.time() 我认为这是独一无二的,因为用户暂时不能提交多个订单