我的GTIN 8校验位和有效性检查无效

时间:2016-03-14 19:52:42

标签: python validation debugging check-digit

我的代码应该要求一个7位数字(GTIN 8)并告诉你第8位和/或要求你输入一个8位数(GTIN 8)并告诉它是否是有效的GTIN 8号码。我虽然没有得到这些输出。

输入非7位数时

错误消息

  

c = int(GTIN [2])* 3

     

IndexError:字符串索引超出范围

输入8位数字时

错误消息

  

如果len(str(GTIN))== 8和sum(total)%10 == 0:

     

TypeError:'int'对象不可迭代   我需要对我的代码做些什么来修复此错误?

感谢。这是我的代码(我可以澄清你不确定的任何内容):

while 2>1:
    GTIN = input("Enter 7 digit number for check-digit. Enter 8 digit number for validity.")
if GTIN.isdigit()==False:
     continue

a = int(GTIN[0])*3
b = int(GTIN[1])*1
c = int(GTIN[2])*3
d = int(GTIN[3])*1
e = int(GTIN[4])*3
f = int(GTIN[5])*1
g = int(GTIN[6])*3

total = (a+b+c+d+e+f+g)

checkdigit = (total + 9) // 10 * 10 - total

if len(GTIN) == 7:
    print("Your check digit is",checkdigit)

if len(str(GTIN))==8 and sum(total)%10==0:
    print("Valid GTIN-8 number")
else: print("Invalid GTIN number")

2 个答案:

答案 0 :(得分:0)

我建议在这里做的是做一些额外的检查,以确保你有你需要的东西。因此,当您收到用户输入并且正在检查isdigit时,请确保长度。

此外,您不应该像设置条件那样使用continue。如果通过初始验证,您应该让逻辑继续进行。因此,您可以做的是检查它是否与条件不匹配,您可以打印错误消息,然后传递continue以重新提示用户:

if not GTIN.isdigit() or not len(GTIN) == 8:
    print("invalid entry...")
    continue

答案 1 :(得分:0)

要总计数字,您可以使用一个短列表,您可以将其用作变量来计算校验位。 我把我这样说:

num_sum  = num * 3 +num_1 + num_2 * 3 + num_3 + num_4 * 3 + num_5 + num_6 * 3

然后在计算时可以使用rounded - num_sum = check digit