2016-02-27 45 views
1

程序從8位GTIN8(條形碼)編號中獲取7位數的輸入,將它們交替乘以3和1,然後減去和從總和的最接近的倍數10.Python:計算GTIN-8數字,代碼有效,但有時會返回負號條形碼

該代碼工作,但有時從算法返回一個負數,但不應該。

這裏是代碼:

GTIN=(input("Enter a 7 digit GTIN number: ")) 
length=len(GTIN) 
if(length==7): 
    P1=int(GTIN[0]) 
P2=int(GTIN[1]) 
P3=int(GTIN[2]) 
P4=int(GTIN[3]) 
P5=int(GTIN[4]) 
P6=int(GTIN[5]) 
P7=int(GTIN[6]) 
GTINT=int(P1*3+P2+P3*3+P4+P5*3+P6+P7*3) 
roundup=round(GTINT, -1) 
GTIN8=int(roundup-GTINT) 
print("Your full GTIN-8 code is: "+str(GTIN)+str(GTIN8)) 

下面是它工作時會發生什麼:

輸入一個7位數的GTIN號碼:9638507 你的全GTIN-8編碼是:96385074

正如你所看到的,返回的數字不是負數。

下面是當它不工作會發生什麼:

輸入一個7位數的GTIN號碼:57你的全GTIN-8代碼:57-4

負數返回,其它不應該。任何想法爲什麼?

+0

融洽,只是讓你知道,在你的第四至變量名稱輸入錯誤最後一行。您編寫了GTINT而不是GTIN。歡迎您:) – 2016-06-09 12:41:54

回答

2

UPC/GTIN上的校驗數字算法會產生負數,您應該使用MOD 10將其轉換爲正數。從改變你的最後一行:

GTIN8=int(roundup-GTINT) 

GTIN8 = int(roundup - GTINT) % 10 
+1

非常感謝您的幫助! –