自定义 GUID(全局唯一标识符)

GUID

全局唯一标识符(GUID)是一种通过算法生成的标识符,典型的,是通过生成二进制长度为 128 位的数字标识符来作为 GUID, 这样的 GUID 的总数达到了2^128个( 约为万亿亿亿亿个),基本(理论上)能做到全宇宙唯一了。

128 位二进制,表示为16进制字符串形式,长度位 32,形如: 'f30cd0d5-93ab-8225-aa0a-db5372b8f44f',其格式的标准定义为:time-low "-" time-mid "-"time-high-and-version "-"clock-seq-and-reserved clock-seq-low "-" node
在这里插入图片描述

基本上还算简短,能更好的支持对其进行排序,分类,哈希,存储等。GUID 可以用作资源的名称标识,因为其随机分配且唯一,不需要一个统一的注册管理中心,应用起来非常的方便。

Java 语言,直接提供了生成 GUID 的工具,java.util.UUID,可以通过 UUID.randomUUID() 方法来获取 GUID 值。详细算法说明,可参考 A Universally Unique IDentifier (UUID) URN Namespace

Java 的 UUID 算法实现具有很高的分配速率,可实现单机器每秒种产生千万个UUID。

JS 实现

JS 本身并没有提供 GUID 的实现,需要自己写,一般情况下,不需要按照标准规范来实现,例如:

function GUID() {
    function part() {
        return Math.floor((1 + Math.random()) * 0x10000)
            .toString(16)
            .substring(1);
    }

    return part() + part() + '-' + part() + '-' + part() + '-' + part() + '-' + part() + part() + part();
}

自定义 GUID

根据自身的业务需求,GUID 完全可以灵活定义,只要满足两点即可:

  • 第一,全局唯一性;
  • 第二,适度的可配置能力;

例外,如果将 GUID 作为主键,也可以通过提升进制数(使用 36 进制,而不是 16 进制),来缩短字符串的长度。

下面,则是自定义的 GUID 实现:

function GUID(typeId = 0, locationId = 0){
    function randPart(){
        return Math.floor(Math.random()*1000_000+1).toString(36);
    }

    function timePart(){
        return Math.floor(new Date().getTime()/(1000*60)).toString(36); // 
    }

    function customPart(v){
        if (typeof v === 'number') return v;
        if (typeof v === 'string' && v.trim.length > 0 && v.indexOf('-') === -1) return v;
        return 0;
    }

    return customPart(typeId) + "-" + randPart() + "-" + timePart() + "-" + randPart() + "-" + customPart(locationId); 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值