Skip to main content

id_validator/
mock.rs

1use crate::check::cal_check_code;
2use crate::region::REGION_CODES;
3use chrono::{Duration, Local};
4
5use std::ops::Range;
6
7// 生成符合规则的身份证号
8pub fn gen_code() -> String {
9    let id = format!("{}{}{:0>3}", gen_area(), gen_date(), gen_range(0..1000));
10    format!("{}{}", id, cal_check_code(id.as_str()))
11}
12
13fn gen_area() -> String {
14    let areas = REGION_CODES.keys().collect::<Vec<_>>();
15    areas[gen_range(0..areas.len())].to_string()
16}
17
18fn gen_date() -> String {
19    let dt = Local::now() - Duration::days(gen_range(6750..15000) as i64);
20    dt.format("%Y%m%d").to_string()
21}
22
23fn gen_range(range: Range<usize>) -> usize {
24    rand::random_range(range)
25}