Created
February 11, 2025 16:40
-
-
Save Fgaoxing/297aa01d0439bb393b0dc3f79796ee42 to your computer and use it in GitHub Desktop.
测试身份证生成工具
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| def calculate_check_code(id_17): | |
| """计算身份证校验码""" | |
| factors = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2] | |
| check_codes = '10X98765432' | |
| total = sum(int(c) * factors[i] for i, c in enumerate(id_17)) | |
| return check_codes[total % 11] | |
| def generate_id_numbers(area_code, birth_date, gender): | |
| """ | |
| 生成符合校验规则的身份证号 | |
| :param area_code: 6位地区代码(字符串) | |
| :param birth_date: 8位出生日期(字符串,格式YYYYMMDD) | |
| :param gender: 性别('男' 或 '女') | |
| :return: 生成器,产生有效身份证号 | |
| """ | |
| # 生成顺序码(前两位范围000-999,第三位根据性别确定奇偶) | |
| for seq in range(0, 100): | |
| for gender_code in (1, 3, 5, 7, 9) if gender == '男' else (0, 2, 4, 6, 8): | |
| # 构建前17位 | |
| first_17 = f"{area_code}{birth_date}{seq:02d}{gender_code}" | |
| # 计算校验码 | |
| check_code = calculate_check_code(first_17) | |
| yield f"{first_17}{check_code}" | |
| def validate_id(id_number): | |
| """验证身份证号有效性""" | |
| if len(id_number) != 18: | |
| return False | |
| try: | |
| return id_number[-1] == calculate_check_code(id_number[:17]) | |
| except: | |
| return False | |
| # 使用示例 | |
| if __name__ == '__main__': | |
| # 参数设置 | |
| area_code = "220500" # 北京东城区 | |
| birth_date = "2010100x" # 1990年2月10日 | |
| gender = "男" | |
| # 生成测试用例 | |
| test_cases = list(generate_id_numbers(area_code, birth_date, gender)) | |
| # 验证并输出前20个结果 | |
| print(f"共生成有效身份证号 {len(test_cases)} 个") | |
| print("具体:") | |
| for case in test_cases: | |
| print(f"{case}") |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment