加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

任意生身份证号码(最新区域划分)

发布时间:2020-12-17 17:17:43 所属栏目:Python 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 import http.cookiejarimport urllib.requestimport urllib.parsefrom PIL import Imageimport gzip,re,randomclass Crawler_self: def __init__(self

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

import http.cookiejar
import urllib.request
import urllib.parse
from PIL import Image
import gzip,re,random

class Crawler_self:    
    def __init__(self):         
        self.Cr_header_data = {
            'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8','Accept-Encoding':'gzip,deflate,sdch','Accept-Language':'zh-CN,zh;q=0.8','Cache-Control':'no-cache','Connection':'keep-alive','Pragma':'no-cache','Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/45.0.2454.101 Safari/537.36'
            }
    def Cr_get_web_list(self,re_data):   #取得网页给定规则数据列表     
        cer = re.compile(r'<ps+class="MsoNormal".*?>(dddddd)<span>')
        strlist = cer.findall(re_data)
        return strlist
    
    def Cr_get_cookies_opener(self,url_1):  #取得cookies
        cj = http.cookiejar.CookieJar()
        pro  = urllib.request.HTTPCookieProcessor(cj)
        opener = urllib.request.build_opener(pro)
        header = []
        for key,value in self.Cr_header_data.items():  #加载请求头
            elem = (key,value)
            header.append(elem)
        opener.addheaders = header
        return opener.open(url_1)

    def Cr_read_data(self,data,de_code='utf-8'):
        return self.Cr_ungzip(data.read()).decode(de_code)

    def Cr_ungzip(self,re_data):  #解压网页
        try:
            data = gzip.decompress(re_data)
        except:
            print('无需解压')
        return data
    
    def Cr_get_ares_list(self,url,de_code='utf-8'):
        b = self.Cr_get_cookies_opener(url)
        c = self.Cr_read_data(b,de_code)
        ares_list = self.Cr_get_web_list(c)  #身份证前6位数字
        return ares_list
    
class Plan_Idcard:
    def __init__(self):
        self.W=[7,9,10,5,8,4,2,1,6,3,7,2]    
        self.ID_num=[18,17,16,15,14,13,12,11,2]    
        self.D_CHECK=['1','0','X','9','8','7','6','5','4','3','2']
        self.ID_aXw = 0
        
    def Plan_id_card(self,ID_1,id_num=10): #
        data = []
        for each in range(id_num):
            self.ID_aXw = 0
            a = '%03d'% random.randint(0,999)
            ID=ID_1+a        
            for i in range(len(self.W)):
                self.ID_aXw = self.ID_aXw + int(ID[i])*self.W[i]            
            ID_mod = self.ID_aXw % 11
            a = ID + self.D_CHECK[ID_mod]
            data.append(a)
        print(data)
        
    
    def get_year_moth_day(self,old = 10):  #获得年月日
        GD_YEAR = 2015  #以2015年计算
        cc = int(old)
        while True:                           
            dd = random.randint(1,10)
            if dd%2 == 0:
                cc = GD_YEAR - cc + dd   #取年
            else:
                cc = GD_YEAR - cc - dd
            if cc >= GD_YEAR:
                print('...你输的年岁^_^过少.自动取随机年岁..')
                cc = 11
                continue                
            else:
                break
        dd = random.randint(1,12)      #取月
        if (dd in (1,12)):
            aa = random.randint(1,31)  #取日
        else:            
            aa = random.randint(1,30)
        if dd == 2:
            if (cc%4==0) and (cc%100==0):
                aa = random.randint(1,29)
            else:
                aa = random.randint(1,28)
        bb= '%04d%02d%02d' %(cc,dd,aa)
        return(bb) 
    
if __name__ == '__main__':
    #最新县及县以上行政区划代码(截止2014年10月31日)
    url_1 = 'http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201504/t20150415_712722.html'    
    a = Crawler_self()
    c = a.Cr_get_ares_list(url_1)
    while True:
        get_num = input('输要获取多少个身份证:')
        if get_num.isalnum() != True:
            print('请输入合法的数字')
            continue
        get_num = int(get_num)//10
        if get_num==0:
            get_num = 1
        year_old = input('请输入大约年龄:')        
        if year_old.isalnum() != True:
            print('请输入合法的数字')
            continue
        for each in range(0,get_num):
            a_a = c[random.randint(0,len(c)-1)]
            dd = Plan_Idcard()
            b_b = dd.get_year_moth_day(year_old)
            dd.Plan_id_card(a_a+b_b)
        break
    
    
   

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读