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类型存储(最好固定长度),也可使用二进制存储