卷百科 手机版

身份证号是怎么编的

   发布时间:2025-01-06 03:31:30

身份证号码的编制规则如下:

地址码:

前六位数字,表示编码对象常住户口所在地的行政区划代码。具体包括:

前1、2位数字表示所在省份的代码。

第3、4位数字表示所在城市的代码。

第5、6位数字表示所在区县的代码。

出生日期码:

第七位至第十四位数字,表示编码对象出生的年、月、日。年份用四位数字表示,年、月、日之间不用分隔符。

顺序码:

第十五位至第十七位数字,表示同一地址码所标识区域内,对同年、月、日出生的人员编定的顺序号。其中,奇数分配给男性,偶数分配给女性。

校验码:

第十八位数字,根据前面十七位数字码,按照ISO 7064:1983, MOD 11-2校验码系统计算出来的检验码。如果最后计算的校验码是“10”,则以“X”代替。

示例

假设某个人的地址码为“110000”,出生日期为2000年1月1日,那么其身份证号码的编排如下:

地址码:110000

出生日期码:20000101

顺序码:由于同年同月同日出生的人较多,假设分配的顺序码为001(奇数),则顺序码为001

校验码:根据前述规则计算出的校验码

最终,其身份证号码为: 11000020000101001X(其中X为校验码)。

生成身份证号的基础代码

```python

import random

def generate_address_code():

示例地址码,可根据实际情况补充完整

address_codes = ["110000", "120000", "310000"]

return random.choice(address_codes)

def generate_birth_date_code():

year = str(random.randint(1950, 2020))

month = str(random.randint(1, 12)).zfill(2)

day = str(random.randint(1, 28)).zfill(2)

return year + month + day

def generate_sequence_code():

这里简单模拟,实际情况顺序码有固定的对应关系

return str(random.randint(1, 999)).zfill(3)

def generate_id_number():

address_code = generate_address_code()

birth_date_code = generate_birth_date_code()

sequence_code = generate_sequence_code()

check_digit = calculate_check_digit(address_code + birth_date_code + sequence_code)

return address_code + birth_date_code + sequence_code + check_digit

def calculate_check_digit(id_number_without_check_digit):

total = 0

for i, digit in enumerate(id_number_without_check_digit):

weight = 1 if i % 2 == 0 else 2

total += int(digit) * weight

check_digit = (11 - (total ))

return str(check_digit)

生成并打印一个随机身份证号码

random_id_number = generate_id_number()

print("Generated ID Number:", random_id_number)

```

请注意,此代码仅为示例,实际应用中需要根据具体的行政区划代码和出生日期进行生成。

相关推荐