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}