uniqid php 重复_PHP: uniqid - Manual

The following class generates VALID RFC 4211 COMPLIANT Universally Unique IDentifiers (UUID) version 3, 4 and 5.

Version 3 and 5 UUIDs are named based. They require a namespace (another valid UUID) and a value (the name). Given the same namespace and name, the output is always the same.

Version 4 UUIDs are pseudo-random.

UUIDs generated below validates using OSSP UUID Tool, and output for named-based UUIDs are exactly the same. This is a pure PHP implementation.

public static functionv3($namespace,$name) {

if(!self::is_valid($namespace)) returnfalse;// Get hexadecimal components of namespace$nhex=str_replace(array('-','{','}'),'',$namespace);// Binary Value$nstr='';// Convert Namespace UUID to bitsfor($i=0;$i

}// Calculate hash value$hash=md5($nstr.$name);

returnsprintf('%08s-%04s-%04x-%04x-%12s',// 32 bits for "time_low"substr($hash,0,8),// 16 bits for "time_mid"substr($hash,8,4),// 16 bits for "time_hi_and_version",

// four most significant bits holds version number 3(hexdec(substr($hash,12,4)) &0x0fff) |0x3000,// 16 bits, 8 bits for "clk_seq_hi_res",

// 8 bits for "clk_seq_low",

// two most significant bits holds zero and one for variant DCE1.1(hexdec(substr($hash,16,4)) &0x3fff) |0x8000,// 48 bits for "node"substr($hash,20,12)

);

}

public static functionv4() {

returnsprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',// 32 bits for "time_low"mt_rand(0,0xffff),mt_rand(0,0xffff),// 16 bits for "time_mid"mt_rand(0,0xffff),// 16 bits for "time_hi_and_version",

// four most significant bits holds version number 4mt_rand(0,0x0fff) |0x4000,// 16 bits, 8 bits for "clk_seq_hi_res",

// 8 bits for "clk_seq_low",

// two most significant bits holds zero and one for variant DCE1.1mt_rand(0,0x3fff) |0x8000,// 48 bits for "node"mt_rand(0,0xffff),mt_rand(0,0xffff),mt_rand(0,0xffff)

);

}

public static functionv5($namespace,$name) {

if(!self::is_valid($namespace)) returnfalse;// Get hexadecimal components of namespace$nhex=str_replace(array('-','{','}'),'',$namespace);// Binary Value$nstr='';// Convert Namespace UUID to bitsfor($i=0;$i

}// Calculate hash value$hash=sha1($nstr.$name);

returnsprintf('%08s-%04s-%04x-%04x-%12s',// 32 bits for "time_low"substr($hash,0,8),// 16 bits for "time_mid"substr($hash,8,4),// 16 bits for "time_hi_and_version",

// four most significant bits holds version number 5(hexdec(substr($hash,12,4)) &0x0fff) |0x5000,// 16 bits, 8 bits for "clk_seq_hi_res",

// 8 bits for "clk_seq_low",

// two most significant bits holds zero and one for variant DCE1.1(hexdec(substr($hash,16,4)) &0x3fff) |0x8000,// 48 bits for "node"substr($hash,20,12)

);

}

public static functionis_valid($uuid) {

returnpreg_match('/^\{?[0-9a-f]{8}\-?[0-9a-f]{4}\-?[0-9a-f]{4}\-?'.'[0-9a-f]{4}\-?[0-9a-f]{12}\}?$/i',$uuid) ===1;

}

}// Usage

// Named-based UUID.$v3uuid=UUID::v3('1546058f-5a25-4334-85ae-e68f2a44bbaf','SomeRandomString');$v5uuid=UUID::v5('1546058f-5a25-4334-85ae-e68f2a44bbaf','SomeRandomString');// Pseudo-random UUID$v4uuid=UUID::v4();?>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值