-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli.py
More file actions
111 lines (102 loc) · 5.5 KB
/
Copy pathcli.py
File metadata and controls
111 lines (102 loc) · 5.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import argparse
import PRCIDCardTool
import sys
import colorama
__version__ = '1.0.0'
colorama.init(autoreset=True)
def main():
parser = argparse.ArgumentParser(description='PRCIDCardTool')
subparsers = parser.add_subparsers(dest='command')
check_parser = subparsers.add_parser('check', help='检查身份证校验码正确')
check_parser.add_argument('id_card_number', type=str, help='身份证号码')
gen_checkcode_parser = subparsers.add_parser('generate_check_code', help='生成身份证校验码')
gen_checkcode_parser.add_argument('id_card_number_first_17', type=str, help='身份证号码前17位')
gen_checkcode_parser.add_argument('--mode', type=str, choices=['all', 'tail'], default='all', help='生成校验码的方式')
args = parser.parse_args()
if args.command == 'check':
result = PRCIDCardTool.check_id_card(args.id_card_number)
if result:
print('身份证校验码正确')
else:
print('身份证校验码错误')
elif args.command == 'generate_check_code':
if args.mode == 'all':
mode = PRCIDCardTool.GeneraterMode.ALL
elif args.mode == 'tail':
mode = PRCIDCardTool.GeneraterMode.ONLY_CHECK
else:
print('Invalid generate check code mode')
sys.exit(1)
check_code = PRCIDCardTool.generate_check_number(args.id_card_number_first_17, mode)
print(check_code)
def climain():
while True:
try:
print(f'{colorama.Back.LIGHTGREEN_EX}{colorama.Fore.LIGHTCYAN_EX}{'=' * 50}{colorama.Style.RESET_ALL}\n{colorama.Back.LIGHTGREEN_EX}{colorama.Fore.YELLOW}PRCIDCardTool - {__version__}{' '*(50-13)}{colorama.Style.RESET_ALL}\n{colorama.Back.LIGHTGREEN_EX}{colorama.Fore.LIGHTCYAN_EX}{'=' * 50}{colorama.Style.RESET_ALL}')
print(f'{colorama.Fore.BLUE}选择功能:')
print(f'{colorama.Fore.GREEN}1. {colorama.Fore.RESET}检查身份证校验码正确')
print(f'{colorama.Fore.GREEN}2. {colorama.Fore.RESET}生成身份证校验码')
print(f'{colorama.Fore.GREEN}0. {colorama.Fore.RESET}退出')
choice = input(f'{colorama.Fore.LIGHTGREEN_EX}请输入数字:{colorama.Fore.RESET}')
if choice == '1':
while True:
print(f'{colorama.Fore.BLUE}请输入身份证号码:')
print(f'{colorama.Fore.GREEN}0. {colorama.Fore.RESET}返回')
id_card_number = input(f'{colorama.Fore.LIGHTGREEN_EX}请输入身份证号码:{colorama.Fore.RESET}')
if id_card_number == '0':
break
try:
result = PRCIDCardTool.check_id_card(id_card_number)
except ValueError:
print(f'{colorama.Fore.RED}输入错误:身份证号码长度不等于18,请重新输入!')
continue
if result:
print(f'{colorama.Fore.GREEN}{colorama.Back.BLUE}身份证校验码正确!')
else:
print(f'{colorama.Fore.RED}{colorama.Back.YELLOW}身份证校验码错误!')
break
elif choice == '2':
while True:
print(f'{colorama.Fore.BLUE}请选择生成校验码的方式:')
print(f'{colorama.Fore.GREEN}1. {colorama.Fore.RESET}生成完整身份证号')
print(f'{colorama.Fore.GREEN}2. {colorama.Fore.RESET}仅生成校验码')
print(f'{colorama.Fore.GREEN}0. {colorama.Fore.RESET}退出')
mode = input(f'{colorama.Fore.LIGHTGREEN_EX}请输入数字:{colorama.Fore.RESET}')
if mode == '1':
mode = PRCIDCardTool.GeneraterMode.ALL
elif mode == '2':
mode = PRCIDCardTool.GeneraterMode.ONLY_CHECK
elif mode == '0':
return
else:
print(f'{colorama.Fore.RED}输入错误,请重新输入!')
continue
break
while True:
print(f'{colorama.Fore.BLUE}请输入身份证号码前17位:')
print(f'{colorama.Fore.GREEN}0. {colorama.Fore.RESET}返回')
id_card_number_first_17 = input(f'{colorama.Fore.LIGHTGREEN_EX}请输入身份证号码前17位:{colorama.Fore.RESET}')
if id_card_number_first_17 == '0':
break
try:
check_code = PRCIDCardTool.generate_check_number(id_card_number_first_17, mode)
except ValueError:
print(f'{colorama.Fore.RED}输入错误:身份证号码长度不等于17,请重新输入!')
continue
break
if mode == PRCIDCardTool.GeneraterMode.ALL:
print(f'{colorama.Fore.GREEN}{colorama.Back.BLUE}身份证号码为:{check_code}')
else:
print(f'{colorama.Fore.GREEN}{colorama.Back.BLUE}校验码为:{check_code}')
elif choice == '0':
return
else:
print(f'{colorama.Fore.RED}输入错误,请重新输入!')
continue
except KeyboardInterrupt:
return
if __name__ == '__main__':
if len(sys.argv) > 1:
main()
else:
climain()