php 生成唯一ID

    function guid($factor='',$prefix='',$suffix='')
    {
	list($usec, $sec) = explode(" ", microtime());
	$guid = $prefix. $factor. $_SERVER['HTTP_USER_AGENT'] . $_SERVER['REMOTE_ADDR']
        . $sec . $usec 
        . mt_rand(0,1000000).time(). mt_rand(0,1000000).$suffix;
	$guid = substr(md5($guid),8,16);
	$guid = strtoupper(base_convert($guid,16,36));
        $guid = str_pad($guid,13,'0',STR_PAD_LEFT);
        return $prefix.$guid.$suffix;
    }


生成因子:  机器毫秒,用户浏览器与操作系统信息,用户IP,随机因子,及自定义(factor)因子

原理:

  • 取以上因子md5值的16位16进制数
  • 将16进制数转成36进制,最大为13位长度
  • 加上前缀与后缀

自定义(factor)因子: 例如可使用用户ID(user_id),模块标识(product, order....)

前缀(prefix): 可用来生成带排序功能的GUID, 如 time(), 计数器等, 可转36进制base_convert(time(),10,36) 减少长度,可 str_pad 固定长度

如需要存库,生成后的ID,在MYSQL中可使用 char类型存储(最好固定长度),也可使用二进制存储

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值