ean_rs/
barcode_data.rs

1
2pub fn calculate_barcode_ean13(ean:&str) -> String {
3    let mut barcode = "101".to_string();
4
5    let first_part = &ean[1..7];
6    let second_part = &ean[7..13];
7
8
9    let prefix = ean.chars().nth(0).unwrap();
10
11    for i in 0..6 {
12        let set_to_affect =  find_set_by_prefix(prefix,i);
13        if set_to_affect == 'A' {
14            barcode = barcode + map_set_a(first_part.chars().nth(i.try_into().unwrap()).unwrap())
15
16        } else if set_to_affect == 'B' {
17            barcode = barcode + map_set_b(first_part.chars().nth(i.try_into().unwrap()).unwrap())
18        } else {
19            panic!("Invalid set")
20        }
21    }
22
23    barcode = barcode + "01010";
24
25    for i in 0..6 {
26
27        barcode = barcode + map_set_c(second_part.chars().nth(i.try_into().unwrap()).unwrap())
28    }
29
30    barcode = barcode + "101";
31
32
33    return barcode
34
35}
36
37
38pub fn calculate_barcode_ean8(ean:&str) -> String {
39    let mut barcode = "101".to_string();
40
41    let first_part = &ean[0..4];
42    let second_part = &ean[4..8];
43
44    for i in 0..4 {
45        barcode = barcode + map_set_a(first_part.chars().nth(i.try_into().unwrap()).unwrap())
46    }
47
48    barcode = barcode + "01010";
49
50    for i in 0..4 {
51        barcode = barcode + map_set_c(second_part.chars().nth(i.try_into().unwrap()).unwrap())
52    }
53
54    barcode = barcode + "101";
55
56
57    return barcode
58
59}
60
61fn map_set_a(raw_char:char) -> &'static str {
62
63    if raw_char == '0' {
64		return "0001101"
65    } else if raw_char == '1' {
66        return "0011001"
67    } else if raw_char == '2' {
68        return "0010011"
69    } else if raw_char == '3' {
70        return "0111101"
71    } else if raw_char == '4' {
72        return "0100011"
73    } else if raw_char == '5' {
74        return "0110001"
75    } else if raw_char == '6' {
76        return "0101111"
77    } else if raw_char == '7' {
78        return "0111011"
79    } else if raw_char == '8' {
80        return "0110111"
81    } else if raw_char == '9' {
82        return "0001011"
83    } else {
84        return ""
85    }
86
87	
88}
89
90fn map_set_b(raw_char:char) -> &'static str {
91
92    if raw_char == '0' {
93		return "0100111"
94    } else if raw_char == '1' {
95        return "0110011"
96    } else if raw_char == '2' {
97        return "0011011"
98    } else if raw_char == '3' {
99        return "0100001"
100    } else if raw_char == '4' {
101        return "0011101"
102    } else if raw_char == '5' {
103        return "0111001"
104    } else if raw_char == '6' {
105        return "0000101"
106    } else if raw_char == '7' {
107        return "0010001"
108    } else if raw_char == '8' {
109        return "0001001"
110    } else if raw_char == '9' {
111        return "0010111"
112    } else {
113        return ""
114    }
115
116
117}
118
119fn map_set_c(raw_char:char) -> &'static str {
120	if raw_char == '0' {
121		return "1110010"
122    } else if raw_char == '1' {
123        return "1100110"
124    } else if raw_char == '2' {
125        return "1101100"
126    } else if raw_char == '3' {
127        return "1000010"
128    } else if raw_char == '4' {
129        return "1011100"
130    } else if raw_char == '5' {
131        return "1001110"
132    } else if raw_char == '6' {
133        return "1010000"
134    } else if raw_char == '7' {
135        return "1000100"
136    } else if raw_char == '8' {
137        return "1001000"
138    } else if raw_char == '9' {
139        return "1110100"
140    } else {
141        return ""
142    }
143
144}
145
146fn find_set_by_prefix(prefix:char, index:i32) -> char {
147    if index == 0 ||  prefix == '0' {
148        return 'A'
149    } else {
150        if prefix == '1' {
151            if index ==1 || index == 3 {
152                return 'A'
153            } else {
154                return 'B'
155            }
156             
157        } else if prefix == '2' {
158            if index ==1 || index == 4 {
159                return 'A'
160            } else {
161                return 'B'
162            }
163        } else if prefix == '3' {
164            if index ==1 || index == 5 {
165                return 'A'
166            } else {
167                return 'B'
168            }
169        } else if prefix == '4' {
170            if index ==2 || index == 3 {
171                return 'A'
172            } else {
173                return 'B'
174            }
175        } else if prefix == '5' {
176            if index ==3 || index == 4 {
177                return 'A'
178            } else {
179                return 'B'
180            }
181        } else if prefix == '6' {
182            if index ==4 || index == 5 {
183                return 'A'
184            } else {
185                return 'B'
186            }
187        } else if prefix == '7' {
188            if index ==2 || index == 4 {
189                return 'A'
190            } else {
191                return 'B'
192            }
193        } else if prefix == '8' {
194            if index ==2 || index == 5 {
195                return 'A'
196            } else {
197                return 'B'
198            }
199        } else if prefix == '9' {
200            if index ==3 || index == 5 {
201                return 'A'
202            } else {
203                return 'B'
204            }
205        } else {
206            print!("error");
207            return 'X'
208        }
209    }
210}