本文将从多个方面介绍Python如何批量生成身份证号码,并给出详细的代码示例。
一、生成随机化的身份证号码
要生成一组随机化的身份证号码,需要使用Python中的随机函数。
import random
def generate_id():
area_list = ["110000", "120000", "130000", "140000", "150000", "210000", "220000", "230000"]
id_number = random.choice(area_list)
id_number += str(random.randint(1950, 2021)).zfill(4)
id_number += str(random.randint(1, 12)).zfill(2)
id_number += str(random.randint(1, 28)).zfill(2)
id_number += str(random.randint(100, 999)).zfill(3)
id_number += str(random.randint(0, 9))
return id_number
该函数将返回一组随机的身份证号码。
二、自定义生成特定区域的身份证号码
有时候我们需要指定生成的身份证号码属于哪个地区。例如,我们只需要生成北京市和天津市的身份证号码。
import random
def generate_id(area):
area_dict = {"北京市": "110000", "天津市": "120000"}
id_number = area_dict[area]
id_number += str(random.randint(1950, 2021)).zfill(4)
id_number += str(random.randint(1, 12)).zfill(2)
id_number += str(random.randint(1, 28)).zfill(2)
id_number += str(random.randint(100, 999)).zfill(3)
id_number += str(random.randint(0, 9))
return id_number
在调用该函数时,需要传入一个字符串参数,表示需要生成身份证号码的所在地区。例如,generate_id(“北京市”)将返回一个属于北京市的随机身份证号码。
三、生成指定数量的身份证号码
有时候我们需要一次性生成多个身份证号码。我们可以使用Python中的循环语句来实现。
import random
def generate_ids(num):
area_list = ["110000", "120000", "130000", "140000", "150000", "210000", "220000", "230000"]
id_list = []
for i in range(num):
id_number = random.choice(area_list)
id_number += str(random.randint(1950, 2021)).zfill(4)
id_number += str(random.randint(1, 12)).zfill(2)
id_number += str(random.randint(1, 28)).zfill(2)
id_number += str(random.randint(100, 999)).zfill(3)
id_number += str(random.randint(0, 9))
id_list.append(id_number)
return id_list
该函数将返回一个长度为num的列表,包含num个随机生成的身份证号码。在调用该函数时,需要传入需要生成的身份证号码数量。
四、生成特定日期范围内的身份证号码
有时候我们需要生成的身份证号码日期范围不是随机的,我们需要调整生成的身份证号码的出生日期。我们可以设置参数来控制日期范围。
import random
def generate_id(start_date, end_date):
area_list = ["110000", "120000", "130000", "140000", "150000", "210000", "220000", "230000"]
begin_date = datetime.strptime(start_date, "%Y%m%d")
end_date = datetime.strptime(end_date, "%Y%m%d")
id_number = random.choice(area_list)
id_number += str(random.randint(begin_date.year, end_date.year)).zfill(4)
month = random.randint(1, 12)
if begin_date.year == end_date.year:
month_range = range(begin_date.month, end_date.month + 1)
month = random.choice(month_range)
elif begin_date.year < end_date.year:
if begin_date.year == id_number[6:10]:
month_range = range(begin_date.month, 13)
month = random.choice(month_range)
elif end_date.year == id_number[6:10]:
month_range = range(1, end_date.month + 1)
month = random.choice(month_range)
day = random.randint(1, 28)
if month in [1, 3, 5, 7, 8, 10, 12]:
day = random.randint(1, 31)
elif month == 2:
day = random.randint(1, 28)
else:
day = random.randint(1, 30)
id_number += str(month).zfill(2)
id_number += str(day).zfill(2)
id_number += str(random.randint(100, 999)).zfill(3)
id_number += str(random.randint(0, 9))
return id_number
该函数将返回一个出生日期在start_date和end_date之间的随机生成的身份证号码。需要注意的是,start_date和end_date需要以字符串形式传递,并且必须符合”yyyymmdd”的格式。
