@datadayrepos/js-id-web
Version:
Utils for generating identifiers in javascript browser environment. Using web crypto engine for random number generation.
45 lines (44 loc) • 1.98 kB
JavaScript
import { randInt1 } from '../crypto/index.js';
export function randomString(keys = 12) {
let randomText = '';
const charset = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890&$#!§_-+?';
const seed = Date.now() % charset.length;
for (let i = 0; i < keys; i++) {
const randomIndex = (randInt1() + seed) % charset.length;
randomText += charset.charAt(randomIndex);
}
return { error: null, result: randomText };
}
export async function generateSecureRandomPin(length = 6) {
if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {
const randomBytes = new Uint8Array(length);
window.crypto.getRandomValues(randomBytes);
const pin = Array.from(randomBytes, byte => (byte % 10).toString()).join('');
return { error: null, result: pin };
}
return { error: 'Secure random generation is not supported in this environment', result: null };
}
export async function generateSecureRandomBase64() {
if (typeof window !== 'undefined' && window.crypto && window.crypto.getRandomValues) {
const randomBytes = new Uint8Array(32);
window.crypto.getRandomValues(randomBytes);
const base64String = btoa(String.fromCharCode(...randomBytes));
return { error: null, result: base64String };
}
return { error: 'Secure random generation is not supported in this environment', result: null };
}
export function randomCrockford(keys = 12) {
let randomText = '';
const charset = '0123456789abcdefghjkmnpqrstvwxyz';
const seed = Date.now() % charset.length;
for (let i = 0; i < keys; i++) {
const randomIndex = (randInt1() + seed) % charset.length;
randomText += charset.charAt(randomIndex);
}
return { error: null, result: randomText };
}
export function getRandomInt(min, max) {
min = Math.ceil(min);
max = Math.floor(max);
return Math.floor(Math.random() * (max - min) + min);
}