from odps.udf import annotate
import re
import datetime
@annotate("string->string")
class julong_gmsfhm_jy(object):
def evaluate(self, one):
if one is None:
return '9'
if len(one)!=18:
return '1'
if not re.match("^\d{17}(\d|X)$",one):
return '2'
try:
datetime.datetime.strptime(one[6:14],'%Y%m%d')
except ValueError:
return 'A01'
if '1800'>one[6:10]:
return'A01'
if one[6:10]>datetime.datetime.today().strftime('%Y'):
return'A01'
checksum=0
dict_keys={0:'1',1:'0',2:'X',3:'9',4:'8',5:'7',6:'6',7:'5',8:'4',9:'3',10:'2'}
factors=(7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2)
for i,element in enumerate(one[0:17]):
checksum = checksum + factors[i] * int(element)
if one[17] == dict_keys[checksum%11]:
return '0'
else:
return 'A02'
校验身份证号的Python的udf
最新推荐文章于 2022-07-17 13:10:25 发布