记录一下,业务中需要生成唯一标识
/* eslint-disable no-bitwise */
const min = 0;
const max = 256;
const RANDOM_LENGTH = 16;
let byteToHex = [];
for (var i = 0; i < 256; i++) {
byteToHex[i] = (i + 0x100).toString(16).substr(1);
}
const rng = () => {
let result = new Array(RANDOM_LENGTH).fill(0);
for (let j = 0; j < RANDOM_LENGTH; j++) {
result[j] = 0xff & (Math.random() * (max - min) + min);
}
return result;
};
const unparse = (buf, offset) => {
let i = offset || 0;
let bth = byteToHex;
return (
bth[buf[i++]] +
bth[buf[i++]] +
bth[buf[i++]] +
bth[buf[i++]] +
'-' +
bth[buf[i++]] +
bth[buf[i++]] +
'-' +
bth[buf[i++]] +
bth[buf[i++]] +
'-' +
bth[buf[i++]] +
bth[buf[i++]] +
'-' +
bth[buf[i++]] +
bth[buf[i++]] +
bth[buf[i++]] +
bth[buf[i++]] +
bth[buf[i++]] +
bth[buf[i++]]
);
};
// **`v4()` - Generate random UUID**
// See https://github.com/broofa/node-uuid for API details
export const v4 = (options, buf, offset) => {
let i = (buf && offset) || 0;
let rnds = rng();
if (options && !(options instanceof String)) {
if (options.random) {
rnds = options.random;
}
if (options.rng) {
rnds = options.rng();
}
}
// Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
rnds[6] = (rnds[6] & 0x0f) | 0x40;
rnds[8] = (rnds[8] & 0x3f) | 0x80;
// Copy bytes to buffer, if provided
if (buf) {
for (var ii = 0; ii < 16; ii++) {
buf[i + ii] = rnds[ii];
}
}
return buf || unparse(rnds);
};
运行
console.log(v4());
// result
// ad5b720c-7c2e-4643-9cc5-672c58e3db05