美文网首页全栈笔记
总结--几种生成唯一id的方法

总结--几种生成唯一id的方法

作者: 韭菜的故事 | 来源:发表于2018-11-22 21:09 被阅读12次

在开发中偶尔会遇到需要生成唯一id的时候,比如对数组的任意一项进行多次增删改,这时就需要给每一项添加唯一标识符来加以区分。以下便是从网络中搜集而来的各种生成唯一标识的方法,在此总结以供以后查阅。

方法1

function uuid() {
    var s = [];
    var hexDigits = "0123456789abcdef";
    for (var i = 0; i < 36; i++) {
        s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = "-";

    var uuid = s.join("");
    return uuid;
}

方法2

function guid() {
    return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
        var r = Math.random() * 16 | 0,
            v = c == 'x' ? r : (r & 0x3 | 0x8);
        return v.toString(16);
    });
}

方法3

function guid2() {
    function S4() {
        return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
    }
    return (S4() + S4() + "-" + S4() + "-" + S4() + "-" + S4() + "-" + S4() + S4() + S4());
}

方法4

/*
    指定长度和基数

*/
function uuid2(len, radix) {
    var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split('');
    var uuid = [],
        i;
    radix = radix || chars.length;

    if (len) {
        // Compact form
        for (i = 0; i < len; i++) uuid[i] = chars[0 | Math.random() * radix];
    } else {
        // rfc4122, version 4 form
        var r;

        // rfc4122 requires these characters
        uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-';
        uuid[14] = '4';

        // Fill in random data.  At i==19 set the high bits of clock sequence as
        // per rfc4122, sec. 4.1.5
        for (i = 0; i < 36; i++) {
            if (!uuid[i]) {
                r = 0 | Math.random() * 16;
                uuid[i] = chars[(i == 19) ? (r & 0x3) | 0x8 : r];
            }
        }
    }

    return uuid.join('');
}

原本以为这类方法的核心应该是要使用New Date()来生成一个唯一的随机数的,没想到都没有用上。。另外我暂时使用了第二种方法,没错,就是代码少。

相关文章

  • 总结--几种生成唯一id的方法

    在开发中偶尔会遇到需要生成唯一id的时候,比如对数组的任意一项进行多次增删改,这时就需要给每一项添加唯一标识符来加...

  • 生成全局唯一id的几种方式

    生成全局唯一id的几种方式: 1、uuid生成全球唯一id,生成方式简单粗暴,本地生成,没有网络开销,效率高;缺点...

  • js生成唯一标识id的几种方法

    在开发中偶尔会遇到需要生成唯一编码的时候,比如对数组的任意一项进行多次增删改,这时就需要给每一项添加唯一标识符来加...

  • Lodash库的uniqueId()方法

    方法: 生成唯一的Id,参数[ prefix='' ]是可选的,可在ID前面添加前缀。

  • 分布式系统生成唯一ID的几种方式

    在分布式系统中常会需要生成系统唯一ID,生成ID有很多方法,根据不同的生成策略,以满足不同的场景、需求以及性能要求...

  • 生成唯一id

    1.API >=9:通过“Build.SERIAL”这个属性来保证ID的独一无二。 api<9

  • Java中生成唯一ID的方法

    有时我们不依赖于数据库中自动递增的字段产生唯一ID,比如多表同一字段需要统一一个唯一ID,这时就需要用程序来生成一...

  • 分布式唯一ID生成方式与优化

    说到分布式ID大家都不陌生 一般来说有以下几种生成唯一ID的方式 1. UUID,最常见,实现方式是形式为8-4-...

  • nsq源码(7) nsqd messageID

    messageID 消息唯一标识 GenerateID()返回ID NewGUID()生成ID

  • 生成分布式序列ID

    生成分布式序列ID 介绍 在很多分布式系统中,需要生成唯一的id。如在分库分表的情况下,给某个逻辑表生成唯一id。...

网友评论

    本文标题:总结--几种生成唯一id的方法

    本文链接:https://www.haomeiwen.com/subject/lkurqqtx.html