-
-
Save rajasgs/2be54ee38465278136901fb6b70e29eb to your computer and use it in GitHub Desktop.
Calculate UPC-A check digit in Python
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def add_check_digit(upc_str): | |
""" | |
Returns a 12 digit upc-a string from an 11-digit upc-a string by adding | |
a check digit | |
>>> add_check_digit('02345600007') | |
'023456000073' | |
>>> add_check_digit('21234567899') | |
'212345678992' | |
>>> add_check_digit('04210000526') | |
'042100005264' | |
""" | |
upc_str = str(upc_str) | |
if len(upc_str) != 11: | |
raise Exception("Invalid length") | |
odd_sum = 0 | |
even_sum = 0 | |
for i, char in enumerate(upc_str): | |
j = i+1 | |
if j % 2 == 0: | |
even_sum += int(char) | |
else: | |
odd_sum += int(char) | |
total_sum = (odd_sum * 3) + even_sum | |
mod = total_sum % 10 | |
check_digit = 10 - mod | |
if check_digit == 10: | |
check_digit = 0 | |
return upc_str + str(check_digit) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment