Node/JavaScript中的十六进制GUID (global Unique Identifier)算法



是否可以使用16个十六进制字符创建GUID ?我问这个问题的原因是Cloudflare使用16个字符来标识对其系统的每个请求(他们称之为"Ray id")。它们看起来比其他GUID格式好得多(我知道这是愚蠢的偏好)。

键空格将包含以下字符:

0-9
a-f
---
16 total possible characters
Example: adttlo9dOd8haoww

同时,任何关于生成这些东西的基本算法的提示都将是很棒的。

最后,我愿意离开"hex"格式,使用:

0-9
a-z
A-Z
---
62 total possible characters
Example: dhmpLTuPFWEwM8UL
  1. 当你需要创建你自己的唯一id的使用日期时间现在。如果您的应用程序是分布式的,请使用datetime。现在+节点标识符这是最简单的解决方案:

function d2h(d) {
    return d.toString(16);
}
function h2d (h) {
    return parseInt(h, 16);
}
function stringToHex (tmp) {
    var str = '',
        i = 0,
        tmp_len = tmp.length,
        c;
 
    for (; i < tmp_len; i += 1) {
        c = tmp.charCodeAt(i);
        str += d2h(c) + ' ';
    }
    return str;
}
function hexToString (tmp) {
    var arr = tmp.split(' '),
        str = '',
        i = 0,
        arr_len = arr.length,
        c;
 
    for (; i < arr_len; i += 1) {
        c = String.fromCharCode( h2d( arr[i] ) );
        str += c;
    }
 
    return str;
}
//if you can get utc time is even bether
// Tue, 30 Jun 2015 23:01:04 GMT
var time = Date();
var server_point = "S1";
//you can encript this genrated id with blow fish or something, remember encripting existen bytes the length of the result wil grow
//remove spaces
var reg = new RegExp("[ ]+","g");
time = time.replace(reg, "");
var hexaResult = stringToHex(time + server_point);
alert(hexaResult.replace(reg, ""));

  • 或者您可以使用加密随机生成器:
  • https://developer.mozilla.org/en-US/docs/Web/API/RandomSource/getRandomValues

    Guids通常是32个十六进制字符,间隔时间不同。

    var crypto = require("crypto");
    function create_guid() {
        var hexstring = crypto.randomBytes(16).toString("hex"); // 16 bytes generates a 32 character hex string
        var guidstring = hexstring.substring(0,8) + "-" + hexstring.substring(8,12) + "-" + hexstring.substring(12,16) + "-" + hexstring.substring(16,20) + "-" + hexstring.substring(20);
        return guidstring;
    }
    

    如果您不想要破折号,可以简单地修改上面的函数以返回hexstring而不是guidstring。如果只需要16个字符而不是32个:

    function create_guid_simple() {
        var hexstring = crypto.randomBytes(8).toString("hex"); // 8 bytes is a 16 character string
        return hexstring;
    }
    

    相关内容

    • 没有找到相关文章

    最新更新