uj5u.com熱心網友回復:
問問題時, 把你代碼貼出來, 以便別人除錯運行, 代碼的作用描述清楚, 不要讓人家大佬猜, 沒那么多精力. 這也是做人的基本謙卑態度.uj5u.com熱心網友回復:
感謝您指出的問題。以后會注意,希望您能不計前嫌。以下改正:題目:
一個合法的身份證號碼由17位地區、日期編號和順序編號加1位校驗碼組成。校驗碼的計算規則如下:
首先對前17位數字加權求和,權重分配為:{7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};然后將計算的和對11取模得到值Z;最后按照以下關系對應Z值與校驗碼M的值:
Z:0 1 2 3 4 5 6 7 8 9 10
M:1 0 X 9 8 7 6 5 4 3 2
現在給定一些身份證號碼,請你驗證校驗碼的有效性,并輸出有問題的號碼。
輸入格式:
4
320124198808240056
12010X198901011234
110108196711301866
37070419881216001X
輸入第一行給出正整數N(≤100)是輸入的身份證號碼的個數。隨后N行,每行給出1個18位身份證號碼。
輸出格式:
12010X198901011234
110108196711301866
37070419881216001X
按照輸入的順序每行輸出1個有問題的身份證號碼。這里并不檢驗前17位是否合理,只檢查前17位是否全為數字且最后1位校驗碼計算準確。如果所有號碼都正常,則輸出All passed。
代碼:
z=[7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] #建立權重串列
m=['1','0','X','9','8','7','6','5','4','3','2'] #建立對應權重的校驗碼串列
n=eval(input()) #輸入身份證的個數
a=[] #建立一個空串列
c=[] #建立一個空串列
for i in range(0,n): #遍歷從0到n
a.append(input()) #能夠輸入n行
for j in a: #從串列a中逐個取出元素(每一個身份證號碼)
j=str(j) #將每一個身份證號碼轉化為字串
str1=str(j[:17]) #取出每一個身份證號碼的前17位
if str1.isdigit() is True: #判斷前17位是否全為數字
c.append(j) #若全為數字則將該身份證號碼添加到c中
for p in range(len(c)): #遍歷c串列中的長度
b=c[p] #令b依次等于經過第一次篩選的每一個身份證號碼
b=b[:17] #取出每一個身份證號碼的前17位
w=0
for q in range(len(b)): #遍歷每一個身份證的長度
w+=int(b[q])*int(z[q]) #對前17位數字的加權求和
y=w%11 #對加權所得和進行取模
b1=b[-1:-2:-1] #令b1等于每一個身份證的最后一位
if b1==m[y]: # 若身份證的最后以為等于所對應的校驗碼
print(b) # 輸出b
uj5u.com熱心網友回復:
檢查下縮進,uj5u.com熱心網友回復:
還有input始侄訓傳str,不用再str處理了轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/254150.html
