31 lines
955 B
Rust
31 lines
955 B
Rust
use std::time::{SystemTime, UNIX_EPOCH, Duration};
|
|
|
|
const BASE62: &[u8] = b"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";
|
|
|
|
fn to_base62(mut num: u64) -> String {
|
|
let mut encoded = String::new();
|
|
while num > 0 {
|
|
encoded.insert(0, BASE62[(num % 62) as usize] as char);
|
|
num /= 62;
|
|
}
|
|
encoded
|
|
}
|
|
|
|
fn generate_id() -> String {
|
|
let epoch_start = UNIX_EPOCH + Duration::from_millis(1_577_836_800_000); // 2020-01-01
|
|
let now = SystemTime::now().duration_since(epoch_start).unwrap().as_millis() as u64;
|
|
|
|
let timestamp = now % 1_000_000_000_000; // Keep last 12 digits
|
|
let random_num = rand::random::<u8>() % 100; // Random 2-digit number
|
|
let final_num = timestamp * 100 + random_num as u64;
|
|
|
|
let mut id = to_base62(final_num);
|
|
while id.len() < 8 { id.insert(0, '0'); } // Ensure 8-char length
|
|
|
|
id
|
|
}
|
|
|
|
fn main() {
|
|
println!("{}", generate_id()); // Example output: "A1b2C3D4"
|
|
}
|