T
const v1options = {
node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
clockseq: 0x1234,
msecs: new Date('2011-11-01').getTime(),
nsecs: 5678,
};
uuidv1(v1options);
Size: a a a
T
Ð
T
T
Ð
Ð
T
T
T
Ð
T
Ð
T
function v1({ node = [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], clockseq = 0, msecs = Date.now(), nsecs = 0 }) {
const b = new Array(16);
clockseq = clockseq & 0x3fff;
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
msecs += 12219292800000;
// `time_low`
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
b[i++] = (tl >>> 24) & 0xff;
b[i++] = (tl >>> 16) & 0xff;
b[i++] = (tl >>> 8) & 0xff;
b[i++] = tl & 0xff;
// `time_mid`
const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;
b[i++] = (tmh >>> 8) & 0xff;
b[i++] = tmh & 0xff;
// `time_high_and_version`
b[i++] = ((tmh >>> 24) & 0xf) | 0x10; // include version
b[i++] = (tmh >>> 16) & 0xff;
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
b[i++] = (clockseq >>> 8) | 0x80;
// `clock_seq_low`
b[i++] = clockseq & 0xff;
// `node`
for (let n = 0; n < 6; ++n) {
b[i + n] = node[n];
}
return b
}
T
T
T
const byteToHex = [];
for (let i = 0; i < 256; ++i) {
byteToHex.push((i + 0x100).toString(16).substr(1));
}
function v1({ node = [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], clockseq = 0, msecs = Date.now(), nsecs = 0 } = {}) {
let i = 0;
const b = new Array(16)
clockseq = clockseq & 0x3fff;
// Per 4.1.4 - Convert from unix epoch to Gregorian epoch
msecs += 12219292800000;
// `time_low`
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
b[i++] = (tl >>> 24) & 0xff;
b[i++] = (tl >>> 16) & 0xff;
b[i++] = (tl >>> 8) & 0xff;
b[i++] = tl & 0xff;
// `time_mid`
const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;
b[i++] = (tmh >>> 8) & 0xff;
b[i++] = tmh & 0xff;
// `time_high_and_version`
b[i++] = ((tmh >>> 24) & 0xf) | 0x10; // include version
b[i++] = (tmh >>> 16) & 0xff;
// `clock_seq_hi_and_reserved` (Per 4.2.2 - include variant)
b[i++] = (clockseq >>> 8) | 0x80;
// `clock_seq_low`
b[i++] = clockseq & 0xff;
// `node`
for (let n = 0; n < 6; ++n) {
b[i + n] = node[n];
}
return (
byteToHex[b[0]] + byteToHex[b[1]] +
byteToHex[b[2]] + byteToHex[b[3]] +
'-' +
byteToHex[b[4]] + byteToHex[b[5]] +
'-' +
byteToHex[b[6]] + byteToHex[b[7]] +
'-' +
byteToHex[b[8]] + byteToHex[b[9]] +
'-' +
byteToHex[b[10]] + byteToHex[b[11]] + byteToHex[b[12]] +
byteToHex[b[13]] + byteToHex[b[14]] + byteToHex[b[15]]
).toLowerCase();
}
console.log(v1({ msecs: Date.parse('04 Dec 1995 00:12:00 GMT') }))
// 5fc18800-2dd0-11cf-8000-000000000000
T
T
const byteToHex = [];
for (let i = 0; i < 256; ++i) {
byteToHex.push((i + 0x100).toString(16).substr(1));
}
const mapHex = (block = []) => block.map(x => byteToHex[x]).join("")
function v1({ node = [ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ], clockseq = 0, msecs = Date.now(), nsecs = 0 } = {}) {
clockseq = clockseq & 0x3fff;
msecs += 12219292800000; // Per 4.1.4 - Convert from unix epoch to Gregorian epoch
const tl = ((msecs & 0xfffffff) * 10000 + nsecs) % 0x100000000;
const tmh = ((msecs / 0x100000000) * 10000) & 0xfffffff;
const block1 = [ (tl >>> 24) & 0xff, (tl >>> 16) & 0xff, (tl >>> 8) & 0xff, tl & 0xff ]
const block2 = [ (tmh >>> 8) & 0xff, tmh & 0xff ]
const block3 = [ ((tmh >>> 24) & 0xf)| 0x10, (tmh >>> 16) & 0xff ]
const block4 = [ (clockseq >>> 8) | 0x80, clockseq & 0xff ]
return `${mapHex(block1)}-${mapHex(block2)}-${mapHex(block3)}-${mapHex(block4)}-${mapHex(node)}`.toLowerCase();
}
console.log(v1({ msecs: Date.parse('04 Dec 1995 00:12:00 GMT') }))
// 5fc18800-2dd0-11cf-8000-000000000000
T