1
2
3
4
5
6
7
8
9
10
11 from barcodegenerator import BarcodeGenerator
12
13 -class Code39(BarcodeGenerator):
14
16 '''
17 Code39 için temel tanımlarını yapar. Bu sınıfta kullanılan Code39 üreticisi, checksum kullanmayan Code39
18 için barkod üretmektedir.
19 '''
20 BarcodeGenerator.__init__(self)
21
22
23 code = code.upper()
24
25
26 self._charSet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ-. $/+%"
27
28 self._charEncoding = {
29 '*': 'bWbwBwBwb', '-': 'bWbwbwBwB', '$': 'bWbWbWbwb', '%': 'bwbWbWbWb', ' ': 'bWBwbwBwb',
30 '.': 'BWbwbwBwb', '/': 'bWbWbwbWb', '+': 'bWbwbWbWb', '0': 'bwbWBwBwb', '1': 'BwbWbwbwB',
31 '2': 'bwBWbwbwB', '3': 'BwBWbwbwb', '4': 'bwbWBwbwB', '5': 'BwbWBwbwb', '6': 'bwBWBwbwb',
32 '7': 'bwbWbwBwB', '8': 'BwbWbwBwb', '9': 'bwBWbwBwb', 'A': 'BwbwbWbwB', 'B': 'bwBwbWbwB',
33 'C': 'BwBwbWbwb', 'D': 'bwbwBWbwB', 'E': 'BwbwBWbwb', 'F': 'bwBwBWbwb', 'G': 'bwbwbWBwB',
34 'H': 'BwbwbWBwb', 'I': 'bwBwbWBwb', 'J': 'bwbwBWBwb', 'K': 'BwbwbwbWB', 'L': 'bwBwbwbWB',
35 'M': 'BwBwbwbWb', 'N': 'bwbwBwbWB', 'O': 'BwbwBwbWb', 'P': 'bwBwBwbWb', 'Q': 'bwbwbwBWB',
36 'R': 'BwbwbwBWb', 'S': 'bwBwbwBWb', 'T': 'bwbwBwBWb', 'U': 'BWbwbwbwB', 'V': 'bWBwbwbwB',
37 'W': 'BWBwbwbwb', 'X': 'bWbwBwbwB', 'Y': 'BWbwBwbwb', 'Z': 'bWBwBwbwb',
38 }
39
40
41 self._wideRatio = 2
42
43
44 for c in code:
45 if c not in self._charSet:
46 raise Exception('Hatali barkod kodu')
47
48
49 self._code = code
50 self._bits = None
51
53 '''
54 Barkodun ikili kodlamasını yapar.
55 w -> dar beyaz
56 b -> dar siyah
57 W -> geniş beyaz
58 B -> geniş siyah
59 '''
60 if self._bits is not None:
61 return self._bits
62
63
64 format = map(lambda x: self._charEncoding[x], self._code)
65
66
67 format = "w".join(format)
68
69 formatToBit = {
70 'w': '0',
71 'b': '1',
72 'W': '0' * self._wideRatio,
73 'B': '1' * self._wideRatio,
74 }
75
76 self._bits = "".join(map(lambda x: formatToBit[x], format))
77
78
79 asteriskFormat = self._charEncoding['*']
80 asteriskBits = ''.join(map(lambda x: formatToBit[x], asteriskFormat))
81
82
83 asteriskBits = asteriskBits.replace('1', 'L')
84
85
86 self._bits = asteriskBits + '0' + self._bits + '0' + asteriskBits
87
88 return self._bits
89
91 '''
92 Yazılacak rakamların bit olarak yerlerini gösterir.
93 '''
94 start = (len(self._bits) - (7 * len(self._code))) / 2
95
96 locations = range(start, start + (7 * len(self._code)), 7)
97
98 return locations
99
102
105