zoukankan      html  css  js  c++  java
  • JS 生成UUID

    function Id(seed) {
        if (!(this instanceof Id)) {
            return new Id(seed);
        }
    
        seed = seed || [128, 36, 1];
        this._seed = seed.length ? hat.rack(seed[0], seed[1], seed[2]) : seed;
    }
    Id.prototype.generateId=function(){
        var res = [], hex = '0123456789ABCDEF';
        for (var i = 0; i < 36; i++) res[i] = Math.floor(Math.random()*0x10);
        res[14] = 4;
        res[19] = (res[19] & 0x3) | 0x8;
        for (var i = 0; i < 36; i++) res[i] = hex[res[i]];
        res[8] = res[13] = res[18] = res[23] = '-';
    
        return res.join('');
    };
    var hat  = function (bits, base) {
        if (!base) base = 16;
        if (bits === undefined) bits = 128;
        if (bits <= 0) return '0';
    
        var digits = Math.log(Math.pow(2, bits)) / Math.log(base);
        for (var i = 2; digits === Infinity; i *= 2) {
            digits = Math.log(Math.pow(2, bits / i)) / Math.log(base) * i;
        }
    
        var rem = digits - Math.floor(digits);
    
        var res = '';
    
        for (var i = 0; i < Math.floor(digits); i++) {
            var x = Math.floor(Math.random() * base).toString(base);
            res = x + res;
        }
    
        if (rem) {
            var b = Math.pow(base, rem);
            var x = Math.floor(Math.random() * b).toString(base);
            res = x + res;
        }
    
        var parsed = parseInt(res, base);
        if (parsed !== Infinity && parsed >= Math.pow(2, bits)) {
            return hat(bits, base)
        }
        else return res;
    };
    hat.rack =function (bits, base, expandBy) {
        var fn = function (data) {
            var iters = 0;
            do {
                if (iters ++ > 10) {
                    if (expandBy) bits += expandBy;
                    else throw new Error('too many ID collisions, use more bits')
                }
    
                var id = hat(bits, base);
            } while (Object.hasOwnProperty.call(hats, id));
    
            hats[id] = data;
            return id;
        };
        var hats = fn.hats = {};
    
        fn.get = function (id) {
            return fn.hats[id];
        };
    
        fn.set = function (id, value) {
            fn.hats[id] = value;
            return fn;
        };
    
        fn.bits = bits || 128;
        fn.base = base || 16;
        return fn;
    };
    

     调用:

    var id=Id().generateId()
  • 相关阅读:
    如何打开肉鸡的3389端口(xp的)
    XP鲜为人知的实用技巧(一)
    利用Ms08067工具进行溢出攻击
    教你建一个别人看不到打不开的文件夹
    在IE上显示自己的名字
    QQ使用的七大非常规秘籍
    第五篇:Python函数基础篇
    Centos7之Systemd(Service文件)详解
    Linux GCC make文件的写法3
    DSP/BIOS学习笔记——2.SWI
  • 原文地址:https://www.cnblogs.com/xinting/p/12536126.html
Copyright © 2011-2022 走看看