爆破火车票上的出生日期

# -*- coding: utf-8 -*-
import re
import datetime
#Errors=[‘验证通过!‘,‘身份证号码位数不对!‘,‘身份证号码出生日期超出范围或含有非法字符!‘,‘身份证号码校验错误!‘,‘身份证地区非法!‘]
def checkIdcard(idcard):
    Errors=[‘验证通过!‘,‘身份证号码位数不对!‘,‘身份证号码出生日期超出范围或含有非法字符!‘,‘身份证号码校验错误!‘,‘身份证地区非法!‘]
    area={"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":"新疆","71":"台湾","81":"香港","82":"澳门","91":"国外"}
    idcard=str(idcard)
    idcard=idcard.strip()
    idcard_list=list(idcard)
    kk=1
    #地区校验,存在BUG,如果不存在area的话,会报错
    if(not area[(idcard)[0:2]]):
        print Errors[4]

    #15位身份号码检测
    if(len(idcard)==15):
        if((int(idcard[6:8])+1900) % 4 == 0 or((int(idcard[6:8])+1900) % 100 == 0 and (int(idcard[6:8])+1900) % 4 == 0 )):
            erg=re.compile(‘[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}$‘)#//测试出生日期的合法性
        else:
            ereg=re.compile(‘[1-9][0-9]{5}[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}$‘)#//测试出生日期的合法性
        if(re.match(ereg,idcard)):
            print Errors[0]
        else:
            print Errors[2]
    #18位身份号码检测
    elif(len(idcard)==18):
        #出生日期的合法性检查
        #闰年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))
        #平年月日:((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))
        if(int(idcard[6:10]) % 4 == 0 or (int(idcard[6:10]) % 100 == 0 and int(idcard[6:10])%4 == 0 )):
            ereg=re.compile(‘[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}[0-9Xx]$‘)#//闰年出生日期的合法性正则表达式
        else:
            ereg=re.compile(‘[1-9][0-9]{5}(19[0-9]{2}|20[0-9]{2})((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|3[0-1])|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|1[0-9]|2[0-8]))[0-9]{3}[0-9Xx]$‘)#//平年出生日期的合法性正则表达式
        #//测试出生日期的合法性
        if(re.match(ereg,idcard)):
            #//计算校验位
            S = (int(idcard_list[0]) + int(idcard_list[10])) * 7 + (int(idcard_list[1]) + int(idcard_list[11])) * 9 + (int(idcard_list[2]) + int(idcard_list[12])) * 10 + (int(idcard_list[3]) + int(idcard_list[13])) * 5 + (int(idcard_list[4]) + int(idcard_list[14])) * 8 + (int(idcard_list[5]) + int(idcard_list[15])) * 4 + (int(idcard_list[6]) + int(idcard_list[16])) * 2 + int(idcard_list[7]) * 1 + int(idcard_list[8]) * 6 + int(idcard_list[9]) * 3
            Y = S % 11
            M = "F"
            JYM = "10X98765432"
            M = JYM[Y]#判断校验位
            if(M == idcard_list[17]):#检测ID的校验位
                print idcard
                print Errors[0]
            else:
                kk=1
                 # print Errors[3]
        else:
            kk=1
            # print Errors[2]
    else:
        kk=1
        # print Errors[1]

if __name__ == "__main__":
        sub=str(raw_input("please input sub 6 num:"))
        check=str(raw_input("please input check num:"))

        start=‘19970101‘
        end=‘19980101‘

        datestart=datetime.datetime.strptime(start,‘%Y%m%d‘)
        dateend=datetime.datetime.strptime(end,‘%Y%m%d‘) 

        while datestart<dateend:
            datestart+=datetime.timedelta(days=1)
            CardNum = sub+str(datestart.strftime(‘%Y%m%d‘) )+check
            checkIdcard(CardNum)
时间: 2024-11-01 14:19:41

爆破火车票上的出生日期的相关文章

破解火车票上的身份证号码

首先我在百度上找到了一个他人的火车票图片 接着从图片里我们可以获取到信息如下: 姓名 梅勇性别 男 (倒数第四位至倒数第二位3位数为顺序码,顺序码为奇数所以为男性)(可参考http://www.cnblogs.com/xudong-bupt/p/3293838.html)来自 武汉市新洲区 (身份证号码前六位代表地区)(可参考http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/200406/t20040607_38302.html) 身份证号码:4201171988

“百度杯”CTF比赛 九月场_123(文件备份,爆破,上传)

题目在i春秋ctf训练营 翻看源码,发现提示: 打开user.php,页面一片空白,参考大佬的博客才知道可能会存在user.php.bak的备份文件,下载该文件可以得到用户名列表 拿去burp爆破: 这七百多号人就没个1999年生的?拿1998继续试.....又凉了...一直试到1990年,终于有个大佬是这年的 账号lixiuyun,密码lixiuyun1990 进入到一个空白的个人中心 直接在火狐查看器中将注释符删除,然后先上传一个图片试试 在文件名后加上.php返回不能出现php,那就拿ph

深夜脑洞,写了一个可以推算火车票身份证号码的小程序

1. 火车票上*号打的是月,日,理论上的有最大366种组合: 2. 校验码是最后的一位,0-9及X,11个结果: 3. 那么,通过火车票上的身份证号,可以得到33个左右真正的有效身份证号: 4. 如果你能知道对方的星座(嗯,大家不是经常曝自己是什么星座么),那么,再将这30多个结果映射到12个星座中,最终可能性只有2-3个... 5. 结论:晒车票,一定要打码 using System; using System.Collections.Generic; using System.Linq; u

信安提供的阿的境况蔡燕扥是的胜多负少--3

· 全国格斗大赛开始 · 银行卡 安全快捷换Q币 · 沟通无极限手机Q时代 · 魔法表情秀出百变心情 · 全国格斗大赛开始 · QQ秀 秀出个性真自我 做假证书 宣传上墙 http://d.pcpop.com/diy/Diy10234221.html http://d.pcpop.com/diy/Diy10234226.html http://d.pcpop.com/diy/Diy10234229.html http://d.pcpop.com/diy/Diy10234236.html http

回校之旅

今天是2015/2/28 18:55 星期六,昨天晚上9点下的火车,还记得... 送我去车站的是我姐姐.姐夫.我小外甥,火车票上写的是16:25发车,所以,我们15:30就从家里出发了,爸爸妈妈没有去送我,我知道他们想去,但是,肯定会忍不住的,我也是.票,当时以为是火车晚点了,但是,后来和我们一起的那个姐姐就问了一下说火车需要5:30才能到,这样也好呀,还能和他们待上不到一个小时,这时更能体会到分别时候的伤感了,我小外甥孙祺润小朋友也等的不耐烦了,刚出检票口的那一瞬间,真的好难过,神马矛盾,误解

Java中Date与String的相互转换

我们在注册网站的时候,往往需要填写个人信息,如姓名,年龄,出生日期等,在页面上的出生日期的值传递到后台的时候是一个字符串,而我们存入数据库的时候确需要一个日期类型,反过来,在页面上显示的时候,需要从数据库获取出生日期,此时该类型为日期类型,然后需要将该日期类型转为字符串显示在页面上,Java的API中为我们提供了日期与字符串相互转运的类DateForamt.DateForamt是一个抽象类,所以平时使用的是它的子类SimpleDateFormat.SimpleDateFormat有4个构造函数,

12306个人敏感信息泄露

/************************************** /* 作者:半斤八兩 /* 博客:http://cnblogs.com/bjblcracked /* 日期:2015-02-20 00:01 /************************************** 只是感兴趣,没有其他目的.失误之处敬请诸位大侠赐教! 当下社会发展迅速,从最初的排队购票,到电话购票,到现在的互联网购票.互联网让我们足不出户,就能购到火车票,让我们越来越便捷.但是人们往往会忽略了

Hibernate学习笔记(六) — Hibernate的二级缓存

我们知道hibernate的一级缓存是将数据缓存到了session中从而减少与数据库的交互.那么二级缓存呢? 一.应用场合 比如,在12306购票时,需要选择出发地与目的地,如果每点一次都与数据库交互一次,这就很不合适,这些地点数据在相当长的一段时间内是不会发生变化的(山东省在相当长的时间内还叫山东省),所以应该缓存起来,没必要每次都与数据库交互,而且该类数据安全性也不是很高. 适合二级缓存的数据: 在现代软件开发中,确实存在一类数据没有什么私有性,为公开的数据,数据基本上不发生变化,该数据保密

二维码知识介绍

一.二维码的分类 二维码,从字面上看就是用两个维度(水平方向和垂直方向)来进行数据的编码,条形码只利用了一个维度(水平方向)表示信息,在另一个维度(垂直方向)没有意义,所以二维码比条形码有着更高的数据存储容量. 从形成方式上,二维码可以分为两类, 1.堆叠式二维码:在一维条形码的基础上,将多个条形码堆积在一起进行编码,常见的编码标准有PDF417等 图1 PDF417码示例 2.矩阵式二维码:在一个矩阵空间中通过黑色和白色的方块进行信息的表示,黑色的方块表示1,白色的方块表示0,相应的组合表示了