(关于PHP类型转换,这个问题不。)
我已经阅读了几个问题,最好不要向用户显示记录ID,但是使用另一个值,它不会提供有关数据库中有多少记录的任何信息,等等。我想要为了实现这一点,在搜索谷歌之后,令人惊讶的是没有找到解决方案。
所以,我的问题是,是否有可能将一个(长的,例如)字符串序列转换为唯一的(或者对于至少百万个转换器而言足够独特)数字序列,是否有任何可用的选项我不知道的? 只是为了向您展示一个例子:
$uName = $this->newUsername;
$publicId = $this->strToInt(somecomplexstring); // Outputs something like 13272992
// Or feed with username
$publicId = $this->strToInt($uName);
答案 0 :(得分:1)
您可能会考虑使用类似slu g的东西。因此,您的用户将在数据库中拥有唯一的ID,但也是一个独特的slug(随机字符串,例如TGqJItemU5TGqJItemU5f6S5VaCr2n)。然后,您可以在向浏览器显示数据时使用此slug而不是id。
答案 1 :(得分:0)
如评论中所述,您可以使用uniquid
获取唯一字符串。此函数将返回十六进制字符串。
如果您只需要数字,则只需使用此hexdec
将十六进制转换为十进制数。
最终代码如下所示:
hexdec(uniqid());
从字符串中获取整数的另一种方法是使用md5
。此函数还返回十六进制字符串,因此您必须使用hexdec来获取十进制数
请注意,md5不是一个唯一的字符串,有一个(非常小的)意外碰撞的概率(340个十亿分之一,请参阅How many random elements before MD5 produces collisions ?以获取更多信息)
答案 2 :(得分:-1)
您可以使用:
md5(uniqid(rand(),true))