siliconid/siliconid.rs

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"
}