Skip to content

Instantly share code, notes, and snippets.

@rajasgs
Forked from corpit/upc_check_digit.py
Created April 3, 2019 13:10
Show Gist options
  • Save rajasgs/2be54ee38465278136901fb6b70e29eb to your computer and use it in GitHub Desktop.
Save rajasgs/2be54ee38465278136901fb6b70e29eb to your computer and use it in GitHub Desktop.
Calculate UPC-A check digit in Python
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