赞
踩
这里介绍两种方法,第一种是用faker随机生成,这一种是最简单的,直接调用faker里面的函数就可以了,第二种是使用random随机数,来生成,这种就需要直接写了!
def fak():
from Test.test import Val # 引用封装校验身份证是否正确合法的模块
from faker import Faker # 引用faker包
fa = Faker(locale='zh-CN')
for y in range(2):
t = fa.ssn()
print(t)
Val(t)
fak()
看代码是不是特别简单…看效果!
from Test.test import Val # 引用封装校验身份证是否正确合法的模块 import time import random class Ran(object): def ran(self): # 随机生成年月日 yea = random.randint(1933, int(time.strftime("%Y"))) # 生成年 # 生成月 mon = random.randint(1, 12) ran_mon = '0' + str(mon) if mon < 10 else mon # 生成日 day = random.randint(1, 27) ran_day = '0' + str(day) if day < 10 else day return str(yea) + str(ran_mon) + str(ran_day) def ran_value(self): # 生成年月日后的三位数 value = random.randint(10, 199) if value < 100: return "0" + str(value) else: return str(value) def ran_area(self): # 随机取生成前六位 province = ('11', '12', '13', '14', '15', '21', '22', '23', '31', '32', '33', '34', '35', '36', '37', '41', '42', '43', '44', '45', '46', '50', '51', '52', '53', '54', '61', '62', '63', '64', '65', '66') return str(province[random.randint(0, len(province))] + '0101') def ran_end(self): # 组成前17位数字 ran = self.ran_area()+self.ran()+self.ran_value() # 前17位每位需要乘上的系数,用字典表示,比如第一位需要乘上7,最后一位需要乘上2 coe = {1: 7, 2: 9, 3: 10, 4: 5, 5: 8, 6: 4, 7: 2, 8: 1, 9: 6, 10: 3, 11: 7, 12: 9, 13: 10, 14: 5, 15: 8, 16: 4, 17: 2} summat = 0 # 循环计算前17位每位乘上系数之后的和 for i in range(17): summat = summat + int(ran[i:i + 1]) * coe[i + 1] # 前17位每位乘上系数之后的和除以11得到的余数对照表,比如余数是0,那第18位就是1 mat = {0: '1', 1: '0', 2: 'X', 3: '9', 4: '8', 5: '7', 6: '6', 7: '5', 8: '4', 9: '3', 10: '2'} return ran + mat[summat % 11] if __name__ == '__main__': print(Ran().ran_end()) Val(Ran().ran_end())
看看效果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。