是否可以使用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
- 当你需要创建你自己的唯一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;
}