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
| def id_check(id): if len(id) != 18: return False if id[-1].upper() == 'X': if not id[:-1].isdigit(): return False else: if not id.isdigit(): return False if id_verify(id) != id[-1].upper(): return False return True
def id_verify(id): c = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] b = [int(id[i]) * c[i] for i in range(17)] a = sum(b) % 11 m = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'] return m[a]
def sex_verify(id, sex): sex_id = id[-2] if int(sex_id) % 2 == 0: return sex == '女' else: return sex == '男'
def birth_check(id, birthday): id_birth_year = id[6:10] id_birth_month = id[10:12] id_birth_day = id[12:14] birthday_from_info = birthday.split('-') return int(id_birth_year) == int(birthday_from_info[0]) and int(id_birth_month) == int(birthday_from_info[1]) and int(id_birth_day) == int(birthday_from_info[2])
def mobile_check(mobile): if len(mobile) != 11: return False if not mobile.startswith('1'): return False if not mobile.isdigit(): return False return True
from datetime import datetime def time_logic_check(birthday, register, last_login): birth_date = datetime.strptime(birthday, '%Y-%m-%d') register_date = datetime.strptime(register, '%Y-%m-%d %H:%M:%S') last_login_date = datetime.strptime(last_login, '%Y-%m-%d %H:%M:%S') return (birth_date < register_date) and (register_date <= last_login_date)
def name_check(name): if len(name) < 2 or len(name) > 4: return False if not name.isalpha(): return False return True
import csv
info_legal = [] with open('data.csv', 'r', encoding='utf-8') as file: reader = csv.reader(file) for row in reader: if not id_check(row[2]): continue if not id_verify(row[2]): continue if not sex_verify(row[2], row[3]): continue if not birth_check(row[2], row[5]): continue if not mobile_check(row[4]): continue if not time_logic_check(row[5], row[6], row[7]): continue if not name_check(row[1]): continue info_legal.append(row)
with open('legals.csv', 'w', encoding='utf-8', newline='') as file: writer = csv.writer(file) writer.writerow(['客户ID','姓名','身份证号','性别','手机号','出生日期','注册时间','最后登录时间']) for row in info_legal: writer.writerow(row)
|