use rand::{random_range};
/// Generates an 8-digit random integer between 10,000,000 and 99,999,999 (inclusive).
/// Guaranteed to start with a non-zero digit (1-9).
fn generate_8_digit_number() -> u32 {
// Standard inclusive range syntax (min..=max)
random_range(10_000_000..=99_999_999)
}
/// Generates an 8-character numeric string between "00000000" and "99999999".
/// Preserves leading zeros using format specifier `{:08}`, suitable for OTPs/PINs.
fn generate_8_digit_code() -> String {
let raw_val: u32 = random_range(0..=99_999_999);
format!("{:08}", raw_val)
}
fn main() {
// Example 1: Standard 8-digit integer
println!("--- 8-Digit Integers (10000000 to 99999999) ---");
for _ in 0..5 {
let num = generate_8_digit_number();
println!("{}", num);
}
// Example 2: Formatted 8-digit string code (preserves leading zeros)
println!("\n--- 8-Digit Codes / OTPs (00000000 to 99999999) ---");
for _ in 0..5 {
let code = generate_8_digit_code();
println!("{}", code);
}
}
/*
run:
--- 8-Digit Integers (10000000 to 99999999) ---
79978922
12938035
97646574
84157321
96819101
--- 8-Digit Codes / OTPs (00000000 to 99999999) ---
31569720
32600275
72466003
08023173
34338600
*/