1. 程式人生 > >爆破火車票上的出生日期

爆破火車票上的出生日期

江蘇 __name__ 表達 elif ror else 則表達式 utf not

# -*- 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)

爆破火車票上的出生日期