barcode_command/barcode/
industrial2of5.rs1
2 use super::BarcodeProperties;
3 use super::Barcode1D;
4
5 pub struct Industrial2of5 {
6 pub barcode_properties: BarcodeProperties,
7 }
8
9 impl Industrial2of5{
10
11 pub fn new(input: &String, check_digit:i32) -> Industrial2of5
12 {
13 Industrial2of5{
14 barcode_properties: BarcodeProperties {
15 input: input.clone(),
16 check_digit:check_digit,
17 human_text: "".to_string(),
18 },
19 }
20 }
21 fn generate_check_digit(&self, data:&String) -> String
22 {
23
24 let mut sum:i32 = 0;
25 let mut str_result:String = "".to_string();
26 let mut toggle = 1;
27 for c in data.chars().rev() {
28 let barcode_value:i32 = c as i32 - 48;
29 if toggle == 1
30 {
31 sum += barcode_value *3;
32 toggle=0;
33 }
34 else
35 {
36 sum += barcode_value;
37 toggle = 1;
38 }
39 }
40 if sum % 10 == 0
41 {
42 str_result = "0".to_string();
43 }
44 else
45 {
46 let cd_val = 10 - (sum % 10) + '0' as i32;
47 let c:char = cd_val as u8 as char;
48 str_result = c.to_string();
49
50 }
51
52 return str_result;
53
54 }
55
56 fn filter_input(&self) -> String
57 {
58 let mut result = "".to_string();
59 for c in self.barcode_properties.input.chars() {
60 if c <= '9' && c >='0'
61 {
62 result.push(c);
63 }
64
65 }
66 result.clone()
67
68 }
69
70 }
71 impl Barcode1D for Industrial2of5
72 {
73
74 fn get_human_text_1d(&self) -> String{
75 self.barcode_properties.human_text.clone()
76 }
77
78
79 fn encode_1d(&mut self) -> String
80 {
81 let mut cd="".to_string();
82 let mut result="".to_string();
83 let mut filtered_data=self.filter_input();
84 let filtered_length = filtered_data.len();
85 if self.barcode_properties.check_digit == 1
86 {
87 if filtered_length > 254
88 {
89 filtered_data.truncate(254);
90 }
91 cd = self.generate_check_digit(&filtered_data);
92
93 }
94 else
95 {
96 if filtered_length > 255
97 {
98 filtered_data.truncate(255);
99 }
100 }
101 result.push('{');
102 result.push_str(&filtered_data);
103 result.push_str(&cd);
104 result.push('}');
105 self.barcode_properties.human_text = result.clone();
106 return result;
107 }
108
109 }
110
111
112
113
114
115
116