最近开始接触金融相关的测试,发现在金融测试中身份证号是个很重要的数据,网上也有很多大佬自己写的身份证生成器,抱着学习的态度,花了两个晚上的时间用python写完了这个身份证号生成器
1. 身份证编码规则

1.1. 身份证地址码
共6位,表示登记户口时所在地的行政区划代码(省、市、县),如下:

1.2. 出生年月日
共8位,表示该居民的出生年月日,年4位数字,月和日分别用2位数字表示,如19930211
1.3. 顺序码
共3位,同一区域内同年同月同日生的人的顺序顺延,男生占偶数,女生占奇数,不足三位自动在前面补0,如某地区出生的第一位男生,则顺序码为002
1.4. 校验码
共1位,校验码前面17位为本体位,校验码根据本体位计算得到
1.4.1. 本体位每位和对应的加权因子相乘并求和得sum
1.4.2. sum对11取余
1.4.3. 根据余数和校验码对应表得到最后的校验码值
附:


举例:44180020130412122(不包含校验码)
- sum = 4x7 + 4x9 + 1x10 + 8x5 + 0x8 + 0x4 + 2x2 + 0x1 + 1x6 + 3x3 + 0x7 + 4x9 + 1x10 + 2x5 + 1x8 + 2x4 +2x2 = 209
- 对11取余得0
- 根据余数和校验码表得到对应值为1
tips:最后一位也可以根据m=12-sum%11得到,若x为10,则最后一位为X,否则为计算得到的m
2. python编码
2.1. 身份证地址码生成
1 | def getAddressNum(self, useRandom=True): |
2.2. 出生年月生成
1 | def getBirthdayNum(self, useRandom=True): |
2.3. 顺序码生成
1 | def getOrder(self): |
2.4. 校验码生成
1 | def getLastCode(self, top17=''): |