2018-12-28  点击量: 3,061

UUID(通用唯一标识符)

UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为16^32=2^128,约等于3.4 x 10^38。也就是说若每纳秒产生1兆个UUID,要花100亿年才会将所有UUID用完。
UUID的标准型式包含32个16进制数字,以连字号分为五段,形式为8-4-4-4-12的32个字符。示例:
550e8400-e29b-41d4-a716-446655440000
UUID亦可刻意重复以表示同类。例如说微软的COM中,所有组件皆必须实现出IUnknown接口,方法是产生一个代表IUnknown的UUID。无论是程序试图访问组件中的IUnknown接口,或是实现IUnknown接口的组件,只要IUnknown一被使用,皆会被参考至同一个ID:00000000-0000-0000-C000-000000000046。

生成方法

PHP

function uuid($prefix = '')
{
$chars = md5(uniqid(mt_rand(), true));
$uuid  = substr($chars,0,8) . '-';
$uuid .= substr($chars,8,4) . '-';
$uuid .= substr($chars,12,4) . '-';
$uuid .= substr($chars,16,4) . '-';
$uuid .= substr($chars,20,12);
return $prefix . $uuid;
}
//Example of using the function -
//Using without prefix.
echo uuid(); //Returns like ‘1225c695-cfb8-4ebb-aaaa-80da344e8352′

C#

using System;
namespace Demo{
public class Test{
public static void Main()
{
Guid guid=Guid.NewGuid();
Console.WriteLine(guid);
}
}
}

C++ //基于boost

#include <boost/uuid/uuid.hpp>
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>
boost::uuids::uuid zcq_uuid = boost::uuids::random_generator()(); // 这里是两个() ,因为这里是调用的 () 的运算符重载
const string dqsj_uuid = boost::uuids::to_string(zcq_uuid);

Java

packagecom.mytest;
importjava.util.UUID;
publicclassUTest {
publicstaticvoidmain(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println(uuid);
}
}

GO

package main
import(
"github.com/nu7hatch/gouuid"
"fmt"
)
func main(){
fmt.Println(uuid.NewV4())
}

Python

#coding=utf-8
import uuid
name = 'test_name'
namespace = 'test_namespace'
print uuid.uuid1()
print uuid.uuid3(namespace,name)
print uuid.uuid4()
print uuid.uuid5(namespace,name)

2 条留言  访客:0 条  博主:0 条

  1. 老董博客

    交换链接吗

    • 影子 博主

      @老董博客 感谢支持,本站暂时不再交换新链接.

评论已关闭!