本文目录一览:
php GUID生成函数和类
一、GUID简介
GUID:
即Globally
Unique
Identifier(全球唯一标识符)
也称作
UUID(Universally
Unique
IDentifier)
。
GUID是一个通过特定算法产生的二进制长度为128位的数字标识符,用于指示产品的唯一性。GUID
主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。
在
Windows
平台上,GUID
广泛应用于微软的产品中,用于标识如如注册表项、类及接口标识、数据库、系统目录等对象。
GUID
的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个
x
是
0-9
或
a-f
范围内的一个32位十六进制数。例如:6F9619FF-8B86-D011-B42D-00C04FC964FF
即为有效的
GUID
值。
二、GUID的优点
1.GUID在空间上和时间上具有唯一性,保证同一时间不同地方产生的数字不同。
2.世界上的任何两台计算机都不会生成重复的
GUID
值。
3.需要GUID的时候,可以完全由算法自动生成,不需要一个权威机构来管理。
4.GUID的长度固定,并且相对而言较短小,非常适合于排序、标识和存储。
三、GUID生成函数
复制代码
代码如下:
function
create_guid()
{
$charid
=
strtoupper(md5(uniqid(mt_rand(),
true)));
$hyphen
=
chr(45);//
"-"
$uuid
=
chr(123)//
"{"
.substr($charid,
0,
8).$hyphen
.substr($charid,
8,
4).$hyphen
.substr($charid,12,
4).$hyphen
.substr($charid,16,
4).$hyphen
.substr($charid,20,12)
.chr(125);//
"}"
return
$uuid;
}
三、GUID生成类
PHP获得GUID类:guid_class.php
复制代码
代码如下:
?php
class
System
{
function
currentTimeMillis()
{
list($usec,
$sec)
=
explode("
",microtime());
return
$sec.substr($usec,
2,
3);
}
}
class
NetAddress
{
var
$Name
=
'localhost';
var
$IP
=
'127.0.0.1';
function
getLocalHost()
//
static
{
$address
=
new
NetAddress();
$address-Name
=
$_ENV["COMPUTERNAME"];
$address-IP
=
$_SERVER["SERVER_ADDR"];
return
$address;
}
function
toString()
{
return
strtolower($this-Name.'/'.$this-IP);
}
}
class
Random
{
function
nextLong()
{
$tmp
=
rand(0,1)?'-':'';
return
$tmp.rand(1000,
9999).rand(1000,
9999).rand(1000,
9999).rand(100,
999).rand(100,
999);
}
}
//
三段
//
一段是微秒
一段是地址
一段是随机数
class
Guid
{
var
$valueBeforeMD5;
var
$valueAfterMD5;
function
Guid()
{
$this-getGuid();
}
//
function
getGuid()
{
$address
=
NetAddress::getLocalHost();
$this-valueBeforeMD5
=
$address-toString().':'.System::currentTimeMillis().':'.Random::nextLong();
$this-valueAfterMD5
=
md5($this-valueBeforeMD5);
}
function
newGuid()
{
$Guid
=
new
Guid();
return
$Guid;
}
function
toString()
{
$raw
=
strtoupper($this-valueAfterMD5);
return
substr($raw,0,8).'-'.substr($raw,8,4).'-'.substr($raw,12,4).'-'.substr($raw,16,4).'-'.substr($raw,20); -phpcreateguid
}
}
GUID类使用方法:
复制代码
代码如下:
require_once("guid.class.php");
$Guid
=
new
Guid();
$Guid-toString();
thinkphp订单号怎么生成
PHP 生成订单号,GUID 方法
生成订单号
function build_order_no() {
return date('Ymd').substr(implode(NULL, array_map('ord', str_split(substr(uniqid(), 7, 13), 1))), 0, 8);-phpcreateguid
}
生成GUID
function guid() {
if (function_exists('com_create_guid')) {
return com_create_guid();
} else {
mt_srand((double)microtime()*10000);
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = chr(45);
$uuid = chr(123)
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
.chr(125);
return $uuid;
}
}
thinkphp怎么生成唯一标识
1、md5(time() . mt_rand(1,1000000));
这种方法有一定的概率会出现重复
2、php内置函数uniqid()
uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID.
w3school参考手册有一句话:"由于基于系统时间,通过该函数生成的 ID 不是最佳的。如需生成绝对唯一的 ID,请使用 md5() 函数"。
3、官方uniqid()参考手册有用户提供的方法,结果类似:{E2DFFFB3-571E-6CFC-4B5C-9FEDAAF2EFD7}
public function create_guid($namespace = '') {
static $guid = '';
$uid = uniqid("", true);
$data = $namespace;
$data .= $_SERVER['REQUEST_TIME'];
$data .= $_SERVER['HTTP_USER_AGENT'];
$data .= $_SERVER['LOCAL_ADDR'];
$data .= $_SERVER['LOCAL_PORT'];
$data .= $_SERVER['REMOTE_ADDR'];
$data .= $_SERVER['REMOTE_PORT'];
$hash = strtoupper(hash('ripemd128', $uid . $guid . md5($data)));
$guid = '{' .
substr($hash, 0, 8) .
'-' .
substr($hash, 8, 4) .
'-' .
substr($hash, 12, 4) .
'-' .
substr($hash, 16, 4) .
'-' .
substr($hash, 20, 12) .
'}';
return $guid;
}