php生成游客id_PHP生成唯一ID 公认较为安全的写法 上传随机文件名

PHP生成随机文件名有多种方式,本次介绍一个在公认比较新、比较安全的随机ID函数。较老的方式一般单一使用rand函数生成随机数字,或者用md5,或者进一步使用uniqid()函数,但不论以上哪种方式,都存在可能重复的问题。我查阅了国外技术论坛,总结了一个名为unique_ID的函数,采用了目前公认较为安全、不容易出现重复的写法,优先使用random_bytes函数、openssl_random_pseudo_byte函数进行随机字符生成。

此函数可以用在各类需要生成唯一ID的场景中,一个非常普遍的场景就是上传图片名。

/**

* unique_ID

* 生成16位以上唯一ID

*

* @author Aspirant Zhang

* @param int $length 不含前缀的长度,最小16,建议20+

* @param str $prefix 前缀

* @return str $id

*/

function unique_ID($length = 16,$prefix = ''){

$id = $prefix;

$addLength = $length - 13;

$id .= uniqid();

if (function_exists('random_bytes')) {

$id .= substr(bin2hex(random_bytes(ceil(($addLength) / 2))),0,$addLength);

} elseif (function_exists('openssl_random_pseudo_bytes')) {

$id .= substr(bin2hex(openssl_random_pseudo_bytes(ceil($addLength / 2))),0,$addLength);

} else {

$id .= mt_rand(1*pow(10,($addLength)),9*pow(10,($addLength)));

}

return $id;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值