#coding=utf-8
from odps.udf import annotate
import re
from pickle import NONE
import datetime
@annotate("string->string")
class gxpt_sfzh15_18(object):
def evaluate(self, fifteen_card):
wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1, ]
vi = [1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2, ]
eighteen_card = fifteen_card[0:6] + '19' + fifteen_card[6:15]
ai = []
remaining = ''
if len(eighteen_card) == 18:
eighteen_card = eighteen_card[0:-1]
if len(eighteen_card) == 17:
s = 0
for i in eighteen_card:
ai.append(int(i))
for i in range(17):
s = s + wi[i] * ai[i]
remaining = s % 11
a='X' if remaining == 2 else str(vi[remaining])
return eighteen_card+a
ODPS:利用Python的udf实现SFZ15位转18位
最新推荐文章于 2023-07-16 12:59:30 发布