大数跨境
0
0

python生成身份证号(测试中需要用到身份证号)

python生成身份证号(测试中需要用到身份证号) 橙子好甜
2024-07-16
0
导读:身份证规则身份证号码编码规则第一、二位表示省(自治区、直辖市、特别行政区)。

身份证规则

身份证号码编码规则

第一、二位表示省(自治区、直辖市、特别行政区)。

第三、四位表示市(地级市、自治州、盟及国家直辖市所属市辖区和县的汇总码)。其中,01-20,51-70表示省直辖市;21-50表示地区(自治州、盟)。

第五、六位表示县(市辖区、县级市、旗)。01-18表示市辖区或地区(自治州、盟)辖县级市;21-80表示县(旗);81-99表示省直辖县级市。

第七、十四位表示出生年月日(单数字月日左侧用0补齐)。其中年份用四位数字表示,年、月、日之间不用分隔符。例如:1981年05月11日就用19810511表示。

第十五、十七位表示顺序码。对同地区、同年、月、日出生的人员编定的顺序号。其中第十七位奇数分给男性,偶数分给女性。

第十八位表示校验码。作为尾号的校验码,是由号码编制单位按统一的公式计算出来的,校验码如果出现数字10,就用X来代替,详情参考下方计算方法。

      1、其中第一代身份证号码为15位。年份两位数字表示,没有校验码。

      2、前六位详情请参考省市县地区代码

      3、X是罗马字符表示数字10,罗马字符(1-12):Ⅰ、Ⅱ、Ⅲ、Ⅳ、Ⅴ、Ⅵ、Ⅶ、Ⅷ、Ⅸ、Ⅹ、Ⅺ、Ⅻ……,详情请参考罗马字符

中国居民身份证校验码算法(即第18位校验算法)

步骤如下:

      1、将身份证号码前面的17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。

      2、将这17位数字和系数相乘的结果相加。

      3、用加出来和除以11,取余数。

      4、余数只可能有0-1-2-3-4-5-6-7-8-9-10这11个数字。其分别对应的最后一位身份证的号码为1-0-X-9-8-7-6-5-4-3-2。

      5、通过上面计算得知如果余数是3,第18位的校验码就是9。如果余数是2那么对应的校验码就是X,X实际是罗马数字10。


例如:某男性的身份证号码为【53010219200508011x】, 我们看看这个身份证是不是合法的身份证。首先我们得出前17位的乘积和【(5*7)+(3*9)+(0*10)+(1*5)+(0*8)+(2*4)+(1*2)+(9*1)+(2*6)+(0*3)+(0*7)+(5*9)+(0*10)+(8*5)+(0*8)+(1*4)+(1*2)】是189,然后用189除以11得出的结果是189/11=17----2,也就是说其余数是2。最后通过对应规则就可以知道余数2对应的检验码是X。所以,可以判定这是一个正确的身份证号码。

实例(python脚本)

import random
import datetime
def generator():
codelist = []
# 获取地区列表txt文件中的区号
# with open('./districtcode.txt', mode="r", encoding="utf-8") as file:
# codelist = file.readlines()

# id = codelist[random.randint(0, len(codelist) - 1)].split(" ")[0] # 地区项
id = "421081"
id = id + str(random.randint(1980, 2019)) # 年份项
da = datetime.date.today() + datetime.timedelta(days=random.randint(1, 366)) # 月份和日期项
id = id + da.strftime('%m%d')
id = id + str(random.randint(100, 300)) # ,顺序号简单处理
print(id)
i = 0
count = 0
weight = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2] # 权重项
checkcode ={'0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5',
'8': '5', '9': '3', '10': '2'} # 校验码映射
for i in range(0, len(id)):
# print(i,int(id[i]) ,weight[i])
count = count + int(id[i]) * weight[i]
# print(count%11)
id = id + checkcode[str(count%11)] # 算出校验码
return id

print(generator())


地区编码

地区编码如:110000 (北京)、 110100(市辖区),详细编码可在线查询查询。

【声明】内容源于网络
0
0
橙子好甜
人生苦短,我用python --it测试狗
内容 30
粉丝 0
橙子好甜 人生苦短,我用python --it测试狗
总阅读32
粉丝0
内容30