faker_rust/default/
id_number.rs1use crate::config::FakerConfig;
4
5pub fn spanish() -> String {
7 let config = FakerConfig::current();
8 let number = config.rand_range(10000000, 99999999);
9 let letters = ['T', 'R', 'W', 'A', 'G', 'M', 'Y', 'F', 'P', 'D', 'X', 'B', 'N', 'J', 'Z', 'S', 'Q', 'V', 'H', 'L', 'C', 'K', 'E'];
10 let letter = letters[(number % 23) as usize];
11 format!("{}{}", number, letter)
12}
13
14pub fn ssn() -> String {
16 let config = FakerConfig::current();
17 let area = config.rand_range(1, 900);
18 let group = config.rand_range(1, 100);
19 let serial = config.rand_range(1, 10000);
20 format!("{:03}-{:02}-{:04}", area, group, serial)
21}
22
23pub fn valid() -> String {
25 spanish()
26}
27
28pub fn invalid() -> String {
30 let config = FakerConfig::current();
31 let number = config.rand_range(10000000, 99999999);
32 let wrong_letter = config.rand_char(&['I', 'O', 'U', 'Ñ']);
33 format!("{}{}", number, wrong_letter)
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 fn test_spanish() {
42 let dni = spanish();
43 assert_eq!(dni.len(), 9);
44 }
45
46 #[test]
47 fn test_ssn() {
48 let ssn_num = ssn();
49 assert_eq!(ssn_num.len(), 11);
50 assert!(ssn_num.contains('-'));
51 }
52
53 #[test]
54 fn test_valid() {
55 assert!(!valid().is_empty());
56 }
57
58 #[test]
59 fn test_invalid() {
60 assert!(!invalid().is_empty());
61 }
62}