How to generate an 8 digits random number in TypeScript

4 Answers

0 votes
function generate8DigitNumber(min: number = 10_000_000, max: number = 99_999_999): number {
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

for (let i: number = 0; i < 10; i++) {
    const randomNum: number = generate8DigitNumber();
  
    console.log(randomNum);
}


/*
run:

77260318
97365841
36051288
55662743
92737888
76308164
21480599
45180292
40728664
21661591

*/

 



answered Oct 7, 2024 by avibootz
edited Oct 2 by avibootz
0 votes
import { randomInt } from 'node:crypto';

const min: number = 10_000_000;
const maxExclusive: number = 100_000_000; // randomInt excludes max bound

for (let i: number = 0; i < 10; i++) {
    const randomNum: number = randomInt(min, maxExclusive);
    console.log(randomNum);
}


/*
run:

36518624
37177146
74457800
43614293
96131967
51509120
98906720
69005219
58712932
49579977

*/

 



answered Oct 2 by avibootz
0 votes
function generate8DigitCode(): string {
    const rawValue: number = Math.floor(Math.random() * 100_000_000);
    return rawValue.toString().padStart(8, '0');
}

for (let i: number = 0; i < 10; i++) {
    const code: string = generate8DigitCode();
    console.log(code);
}


/*
run:

59229485
08445761
44364821
52783154
91933680
97123379
93353164
26730779
71153034
66813413

*/

 



answered Oct 2 by avibootz
0 votes
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

*/

 



answered Oct 2 by avibootz
...