2016年8月24日 星期三

python 程式設計50題測試範例-15

15、身分證認證
   確認一組身分證號碼是否合法??
   (1)英文代號以下表轉換成數字
   A=10 台北市   J=18 新竹縣   S=26 高雄縣
   B=11 台中市   K=19 苗栗縣   T=27 屏東縣
   C=12 基隆市   L=20 台中縣   U=28 花蓮縣
   D=13 台南市   M=21 南投縣   V=29 台東縣
   E=14 高雄市   N=22 彰化縣  * W=32 金門縣
   F=15 台北縣  * O=35 新竹市   X=30 澎湖縣
   G=16 宜蘭縣   P=23 雲林縣   Y=31 陽明山
   H=17 桃園縣   Q=24 嘉義縣  * Z=33 連江縣
  * I=34 嘉義市   R=25 台南縣
   (2) 英文轉成的數字, 個位數乘9再加上十位數
   (3)各數字從右到左依次乘1、2、3、4....8
   (4)求出(2),(3)之和
   (5)求出(4)10後之餘數,10減該餘數,結果就是檢查碼,若餘數為0
     檢查碼就是0

身分證字號規則: 
字母(ABCDEFGHJKLMNPQRSTUVXYWZIO)對應一組數(10~35) 
令其十位數為X1,個位數為X2( 如A:X1=1 , X2=0 )D表示2~9數字 
Y = X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7+ 1*D8 + D9 
Y能被10整除,則表示該身分證號碼為正確,否則為錯誤。


範例一
範例二
範例三
範例四
輸入
M122105934
B122410941
A200000001
B200000004
輸出

ID
M122105934
B122410941
C168409480
M=21
11
B=11
10
C=12
19
8
1
8
8
1
8
8
1
8
7
2
14
7
2
14
7
6
42
6
2
12
6
2
12
6
8
48
5
1
5
5
4
20
5
4
20
4
0
0
4
1
4
4
0
0
3
5
15
3
0
0
3
9
27
2
9
18
2
9
18
2
4
8
1
3
3
1
4
4
1
8
8
1
4
4
1
1
1
1
0
0
10
 
 
90
 
 
91
 
 
180
餘數
0.00
1.00
0.00
正確
錯誤
正確


1
A
1
0
1
 
14
N
2
2
20
2
B
1
1
10
 
15
O
3
5
48
3
C
1
2
19
 
16
P
2
3
29
4
D
1
3
28
 
17
Q
2
4
38
5
E
1
4
37
 
18
R
2
5
47
6
F
1
5
46
 
19
S
2
6
56
7
G
1
6
55
 
20
T
2
7
65
8
H
1
7
64
 
21
U
2
8
74
9
I
3
4
39
 
22
V
2
9
83
10
J
1
8
73
 
23
W
3
2
21
11
K
1
9
82
 
24
X
3
0
3
12
L
2
0
2
 
25
Y
3
1
12
13
M
2
1
11
 
26
Z
3
3
30
英文轉成的數字, 個位數乘9再加上十位數


程式 :

#coding:UTF-8

#身分證認證 確認一組身分證號碼是否合法?? 
#   (1)英文代號以下表轉換成數字 
#   A=10 台北市   J=18 新竹縣   S=26 高雄縣 
#   B=11 台中市   K=19 苗栗縣   T=27 屏東縣 
#   C=12 基隆市   L=20 台中縣   U=28 花蓮縣 
#   D=13 台南市   M=21 南投縣   V=29 台東縣 
#   E=14 高雄市   N=22 彰化縣  * W=32 金門縣 
#   F=15 台北縣  * O=35 新竹市   X=30 澎湖縣 
#   G=16 宜蘭縣   P=23 雲林縣   Y=31 陽明山 
#   H=17 桃園縣   Q=24 嘉義縣  * Z=33 連江縣 
#  * I=34 嘉義市   R=25 台南縣 
#   (2)英文轉成的數字, 個位數乘9再加上十位數 
#   (3)各數字從右到左依次乘1、2、3、4....8 
#   (4)求出(2),(3)之和 
#   (5)求出(4)除10後之餘數,用10減該餘數,結果就是檢查碼,
#         若餘數為0 檢查碼就是0 為正確

# 身分證字號規則: 
# 字母(ABCDEFGHJKLMNPQRSTUVXYWZIO)對應一組數(10~35), 
# 令其十位數為X1,個位數為X2;( 如A:X1=1 , X2=0 );D表示2~9數字 
# Y = X1 + 9*X2 + 8*D1 + 7*D2 + 6*D3 + 5*D4 + 4*D5 + 3*D6 + 2*D7+ 1*D8 + D9 
# 如Y能被10整除,則表示該身分證號碼為正確,否則為錯誤。

print("====  python 程式設計50題測試範例-14 =====")
print(" 身分證認證 確認一組身分證號碼是否合法?? ")

while True:
     sP = input('請輸入一組身分證號碼 :')
     try:
        sP = repr(sP)   #repr() 函式可以轉換任何的值成為一個字串
        # print (len(sP))
     except ValueError:
       print ('這是不合法的輸入.  請再輸入一次...')
       continue
        
     if len(sP) ==12 :   #ID 10位數 + 2個 '號  共12個
       break


sP=(sP[1:len(sP)-1])   #[ : ] 截取字符串中的一部分
print("=====================================")
print("輸入的身分證號碼是",sP)
Sum=0

s=list(sP)   #string to list

if s[0]=='A':
   Sum=Sum+1
elif s[0]=='B':
   Sum=Sum+10
elif s[0]=='C':
   Sum=Sum+19
elif s[0]=='D':
   Sum=Sum+28
elif s[0]=='E':
   Sum=Sum+37
elif s[0]=='F':
   Sum=Sum+46
elif s[0]=='G':
   Sum=Sum+55
elif s[0]=='H':
   Sum=Sum+64
elif s[0]=='I':
   Sum=Sum+39
elif s[0]=='J':
   Sum=Sum+73
elif s[0]=='K':
   Sum=Sum+82
elif s[0]=='L':
   Sum=Sum+2
elif s[0]=='M':
   Sum=Sum+11
elif s[0]=='N':
   Sum=Sum+20
elif s[0]=='O':
   Sum=Sum+48
elif s[0]=='P':
   Sum=Sum+29
elif s[0]=='Q':
   Sum=Sum+38
elif s[0]=='R':
   Sum=Sum+47
elif s[0]=='S':
   Sum=Sum+56
elif s[0]=='T':
   Sum=Sum+65
elif s[0]=='U':
   Sum=Sum+74
elif s[0]=='V':
   Sum=Sum+83
elif s[0]=='W':
   Sum=Sum+21
elif s[0]=='X':
   Sum=Sum+3
elif s[0]=='Y':
   Sum=Sum+12
elif s[0]=='Z':
   Sum=Sum+30  
else:
   Sum=Sum+0


Sum1=8*int(s[1])+7*int(s[2])+6*int(s[3])+5*int(s[4])+4*int(s[5])+3*int(s[6])+2*int(s[7])+1*int(s[8])+int(s[9])
Sum=Sum+Sum1
Sum=Sum%10

if Sum==0 :
   print("輸入的身分證號碼",sP,"是合法的")
else :

   print("輸入的身分證號碼",sP,"是不合法的")         


結果 :
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-15.py =================
====  python 程式設計50題測試範例-14 =====
 身分證認證 確認一組身分證號碼是否合法?? 
請輸入一組身分證號碼 :B200000004
=====================================
輸入的身分證號碼是 B200000004
輸入的身分證號碼 B200000004 是合法的
>>> 
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-15.py =================
====  python 程式設計50題測試範例-14 =====
 身分證認證 確認一組身分證號碼是否合法?? 
請輸入一組身分證號碼 :A200000001
=====================================
輸入的身分證號碼是 A200000001
輸入的身分證號碼 A200000001 是不合法的
>>> 
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-15.py =================
====  python 程式設計50題測試範例-14 =====
 身分證認證 確認一組身分證號碼是否合法?? 
請輸入一組身分證號碼 :B122410941
=====================================
輸入的身分證號碼是 B122410941
輸入的身分證號碼 B122410941 是不合法的
>>> 
================= RESTART: D:/程式語言 Python 入門/50題/Ex50-15.py =================
====  python 程式設計50題測試範例-14 =====
 身分證認證 確認一組身分證號碼是否合法?? 
請輸入一組身分證號碼 :M122105934
=====================================
輸入的身分證號碼是 M122105934
輸入的身分證號碼 M122105934 是合法的
>>> 

沒有留言:

張貼留言

Messaging API作為替代方案

  LINE超好用功能要沒了!LINE Notify明年3月底終止服務,有什麼替代方案? LINE Notify將於2025年3月31日結束服務,官方建議改用Messaging API作為替代方案。 //CHANNEL_ACCESS_TOKEN = 'Messaging ...