if (l != 6 and l != 7 and l != 11 and l != 12) or not number.isdigit():
sys.stderr.write("Can not encode '" + number + "' into UPC-E Barcode, Size must be 6 numbers only, and 1 check digit (optional)\nOr a convertable 11 digit UPC-A number with 1 check digit (also optional).\n")
return
echeck = None
if l==7 or l==12:
echeck = number[-1]
number = number[:-1]
sys.stderr.write("CHECKSUM FOUND!")
l -= 1
if l==6:
number = self.ConvertEtoA(number)
if not echeck:
echeck = self.getChecksum(number)
else:
if not self.verifyChecksum(number + echeck):
sys.stderr.write("UPC-E Checksum not correct for this barcode, omit last character to generate new checksum.\n")
return
number = self.ConvertAtoE(number)
if not number:
sys.stderr.write("UPC-A code could not be converted into a UPC-E barcode, please follow the UPC guide or enter a 6 digit UPC-E number..\n")
return
number = number
result = result + guardBar
# The check digit isn't stored as bars but as a mirroring system. :-(
family = mapFamily[int(echeck)]
i = 0
for i in range(0,6):
result += mapLeftFaimly[int(family[i])-1][int(number[i])]
result = result + centerBar + '2';
self.label = '0 ' + number[:6] + ' ' + echeck
self.inclabel = self.label
return result;
def fontSize(self):
return '10'
def ConvertAtoE(self, number):
# Converting UPC-A to UPC-E
# All UPC-E Numbers use number system 0
if number[0] != '0' or len(number)!=11:
# If not then the code is invalid
return None
# Most of the conversions deal
# with the specific code parts
manufacturer = number[1:6]
product = number[6:11]
# There are 4 cases to convert:
if manufacturer[2:] == '000' or manufacturer[2:] == '100' or manufacturer[2:] == '200':
# Maxium number product code digits can be encoded