Files
lislgosms/src/utils/randomId.ts
T

33 lines
1.1 KiB
TypeScript

export function createUuid() {
const webCrypto = globalThis.crypto;
if (typeof webCrypto?.randomUUID === 'function') {
return webCrypto.randomUUID();
}
const bytes = createRandomBytes(16);
bytes[6] = (bytes[6] & 0x0f) | 0x40;
bytes[8] = (bytes[8] & 0x3f) | 0x80;
const hex = Array.from(bytes, (value) => value.toString(16).padStart(2, '0'));
return `${hex.slice(0, 4).join('')}-${hex.slice(4, 6).join('')}-${hex.slice(6, 8).join('')}-${hex.slice(8, 10).join('')}-${hex.slice(10).join('')}`;
}
export function createRandomHex(length: number) {
const normalizedLength = Math.max(0, Math.floor(length));
return Array.from(createRandomBytes(Math.ceil(normalizedLength / 2)), (value) => value.toString(16).padStart(2, '0'))
.join('')
.slice(0, normalizedLength);
}
function createRandomBytes(length: number) {
const bytes = new Uint8Array(length);
const webCrypto = globalThis.crypto;
if (typeof webCrypto?.getRandomValues === 'function') {
webCrypto.getRandomValues(bytes);
return bytes;
}
for (let index = 0; index < bytes.length; index += 1) {
bytes[index] = Math.floor(Math.random() * 256);
}
return bytes;
}