import { randomInt } from 'node:crypto';
/**
* Interface defining options for generating 8-digit random codes.
*/
export interface GeneratorOptions {
/**
* If true, generates an 8-character string with leading zero padding (00000000-99999999).
* If false, generates a strictly positive 8-digit integer (10000000-99999999).
*/
allowLeadingZeros?: boolean;
}
/**
* Generates a random 8-digit mathematical integer between 10,000,000 and 99,999,999 (inclusive).
* Guaranteed to start with a non-zero digit (1-9).
*
* @returns {number} An 8-digit positive integer.
*/
export function generate8DigitNumber(): number {
const min: number = 10_000_000;
const maxExclusive: number = 100_000_000; // crypto.randomInt excludes the upper bound
// randomInt uses OS-level entropy and manages uniform distribution without modulo bias
return randomInt(min, maxExclusive);
}
/**
* Generates an 8-character numeric string code between "00000000" and "99999999".
* Preserves leading zeros using padStart, suitable for OTPs, PINs, or verification tokens.
*
* @returns {string} An 8-character numeric string padded with leading zeros if necessary.
*/
export function generate8DigitCode(): string {
const min: number = 0;
const maxExclusive: number = 100_000_000;
// Generate integer in range [0, 99999999]
const rawValue: number = randomInt(min, maxExclusive);
// String.prototype.padStart ensures exact 8-character width
return rawValue.toString().padStart(8, '0');
}
// ==========================================
// Example Execution & Usage
// ==========================================
function main(): void {
try {
// 1. Generate an 8-digit mathematical integer [10000000 to 99999999]
const randomNumber: number = generate8DigitNumber();
console.log(`Generated 8-digit integer: ${randomNumber}`);
// 2. Generate an 8-character string code [00000000 to 99999999] preserving leading zeros
const randomCode: string = generate8DigitCode();
console.log(`Generated 8-digit OTP/PIN code: ${randomCode}`);
} catch (error: unknown) {
if (error instanceof Error) {
console.error(`Failed to generate random value: ${error.message}`);
} else {
console.error('An unknown error occurred during execution.');
}
}
}
// Execute the main program
main();
/*
run:
Generated 8-digit integer: 18663315
Generated 8-digit OTP/PIN code: 44008703
*/