使用Python实现根据指定的出生日期自动生成测试身份证号码的方法

1、身份证号码结构简介
1.号码的结构

公民身份号码是特征组合码,由十七位数字本体码和一位校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

2.地址码

表示编码对象常住户口所在县(县级市、旗、区)的行政区划代码,按GB/T2260的规定执行。

3.出生日期码

表示编码对象出生的年、月、日,按GB/T7408的规定执行,年、月、日代码之间不用分隔符。

4.顺序码

表示在同一地址码所标识的区域范围内,对同年、同月、同日出生的人编定的顺序号,顺序码的奇数分配给男性,偶数分配给女性。

5.校验码

根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。

2、身份证号码尾号算法示例

比如身份证号码前17位为:11011119900203123

第一步、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ,并且将这17位数字和系数相乘的结果相加

例如:1x7+1x9+0x10+1x5+1x8+1x4+1x2+9x1+9x6+0x3+0x7+2x9+0x10+3x5+1x8+2x4+3x2 = 153

第二步、用加出来和除以11,看余数是多少;

例如:153 / 11 = 13余10,余数为10

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

例如:上一步中的余数为10,我们的校验位就是:2

所以,身份证号码为:11011119900203123

用我之前写的校验工具校验一下,确认无误:

1584436953604.png
3、全代码

我们要实现的功能:输入出生年月日,自动随机生成一个身份证号码;

# -*- coding: utf-8 -*-
# @Time    : 2020/3/17 17:29
# @Author  : felix
# @File    : idNumber.py
# @Software: PyCharm

import random

#预设地区:
codelist = ["110101","110102","110105","110106","110107","420117","420200","420202","420203","420204","420205","420222"]    #随便设置了几个地区,基本都是湖北和北京的;
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'} #校验码映射

def newIdNum(birthyear,birthmonth,birthday):
    #身份证前6位
    try:
        id = codelist[random.randint(0,len(codelist))] #地区项
    except:
        id = "110101"

    #7-10位,出生年份
    try:
        birthdayStr = str(birthyear).zfill(4)+str(birthmonth).zfill(2)+str(birthday).zfill(2)
        id = id + birthdayStr
    except:
        id = id + "19900101"

    #最后4位的随机前3位
    sex = ""
    try:
        sign = random.randint(1,999)
        if sign%2 == 0:
            sex = "女"
        else:
            sex = "男"
        id = id + str(sign).zfill(3) #顺序号简单处理
    except:
        id = id + "999"
    #判断性别

    sum_1 = 0
    for a in range(17):
        sum_1 = sum_1+int(id[a])*weight[a]
    index_id = sum_1%11
    result_id = id + str(checkcode[str(index_id)])  #最终号码
    return (result_id,sex)

if __name__ == '__main__':
    birthyear = input("请输入出生年(例如:1990): ")
    birthmonth = input("请输入出生月(例如:10): ")
    birthday = input("请输入出生日(例如:2): ")
    (id,sex) = newIdNum(birthyear,birthmonth,birthday)
    print("身份证号码为:%s,性别:%s" %(id,sex))

测试输出:

请输入出生年(例如:1990): 1989
请输入出生月(例如:10): 12
请输入出生日(例如:2): 13
身份证号码为:320200198912135760,性别:女

Process finished with exit code 0
请输入出生年(例如:1990): 2010
请输入出生月(例如:10): 12
请输入出生日(例如:2): 3
身份证号码为:420117201012031026,性别:女

Process finished with exit code 0
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,732评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,496评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,264评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,807评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,806评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,675评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,029评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,683评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,704评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,666评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,773评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,413评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,016评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,204评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,083评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,503评论 2 343

推荐阅读更多精彩内容

  • 为什么有的人身份证最后一位的号码是0、1或2、3、4、5、6、7、8、9或X,而有的人是X这是怎么回事的呢,又有多...
    吴富良阅读 7,429评论 0 1
  • 开发过程中多多少少都会碰到身份证号码,今天在做项目的时候,碰到了对对15位、18位身份证号码进行校验,借此机会在网...
    追梦小乐阅读 2,405评论 1 60
  • 身份证号码编码规则 身份证号随着个人的落户后会自动生成,早期的身份证号码是15位,也叫社会保障号,1999年正式更...
    MarcoHorse阅读 2,622评论 0 1
  • 前言 根据最新修订的《中华人民共和国居民身份证法》第二十三条规定,依照《中华人民共和国居民身份证条例》领取的居民身...
    godson_ds阅读 83,063评论 32 42
  • 晚上摘录《原则》原文,时不时就要输错一个字,非常恼火输入法太不智能了,怎么就不能理解我的意思,然后准确无误地输入呢...
    青蛙杨阅读 332评论 0 0