Creator UUID生成算法

for (var Uuid = ("undefined" == typeof CC_EDITOR || CC_EDITOR) && require("node-uuid"), Base64KeyChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", AsciiTo64 = new Array(128), i = 0; i < 128; ++i) AsciiTo64[i] = 0;
for (i = 0; i < 64; ++i) AsciiTo64[Base64KeyChars.charCodeAt(i)] = i;
var Reg_Dash = /-/g,
    Reg_Uuid = /^[0-9a-fA-F-]{36}$/,
    Reg_NormalizedUuid = /^[0-9a-fA-F]{32}$/,
    Reg_CompressedUuid = /^[0-9a-zA-Z+/]{22,23}$/,
    UuidUtils = {
        NonUuidMark: ".",
        compressUuid: function (i, e) {
            if (Reg_Uuid.test(i)) i = i.replace(Reg_Dash, "");
            else if (!Reg_NormalizedUuid.test(i)) return i;
            var s = !0 === e ? 2 : 5;
            return UuidUtils.compressHex(i, s)
        },
        compressHex: function (i, e) {
            var s, r = i.length;
            s = void 0 !== e ? e : r % 3;
            for (var t = i.slice(0, s), o = []; s < r;) {
                var u = parseInt(i[s], 16),
                    d = parseInt(i[s + 1], 16),
                    n = parseInt(i[s + 2], 16);
                o.push(Base64KeyChars[u << 2 | d >> 2]), o.push(Base64KeyChars[(3 & d) << 4 | n]), s += 3
            }
            return t + o.join("")
        },
        decompressUuid: function (i) {
            if (23 === i.length) {
                for (var e = [], s = 5; s < 23; s += 2) {
                    var r = AsciiTo64[i.charCodeAt(s)],
                        t = AsciiTo64[i.charCodeAt(s + 1)];
                    e.push((r >> 2).toString(16)), e.push(((3 & r) << 2 | t >> 4).toString(16)), e.push((15 & t).toString(16))
                }
                i = i.slice(0, 5) + e.join("")
            } else if (22 === i.length) {
                for (e = [], s = 2; s < 22; s += 2) {
                    r = AsciiTo64[i.charCodeAt(s)], t = AsciiTo64[i.charCodeAt(s + 1)];
                    e.push((r >> 2).toString(16)), e.push(((3 & r) << 2 | t >> 4).toString(16)), e.push((15 & t).toString(16))
                }
                i = i.slice(0, 2) + e.join("")
            }
            return [i.slice(0, 8), i.slice(8, 12), i.slice(12, 16), i.slice(16, 20), i.slice(20)].join("-")
        },
        isUuid: function (i) {
            return Reg_CompressedUuid.test(i) || Reg_NormalizedUuid.test(i) || Reg_Uuid.test(i)
        },
        uuid: function () {
            var i = Uuid.v4();
            return UuidUtils.compressUuid(i, !0)
        }
    };

module.exports = UuidUtils;
4赞

有效,感谢