对于那些不知道的人来说,智利RUT是居民的ID,类似于USCIS#,由7-8个数字组成,后跟验证数字(通过MOD11检查类型计算)。
我编写了下一个Python代码来使用Python列表获取该数字,但我需要询问是否有更好、最新、更智能或更短的方法来获取它。
使用MOD11算法:
代码:
# Function to calculate digit using python lists
def DIG(RUT):
RUTrev=list(reversed(RUT))
CAD10=list(str(2345672345))
calc = list(int(RUTrev[i]) * int(CAD10[i]) for i in range(len(RUT)))
digit = 11-sum(calc)%11
if digit==10:
digit="K"
elif digit==11:
digit=0
else:
digit=digit
return digit
# Using the function to show the entire ID
RUT=input("Insert RUT number:/n")
print(f"RUT with digit is: {RUT}-{DIG(RUT)}")
输出:
Insert RUT number:
12345678
RUT with digit is: 12345678-5
首先,你应该使函数的返回类型保持一致。
您可以使用 map()
轻松枚举输入值 (RUT)类似这样的:
def checkDigit(rut):
m = 2
_sum = 0
for d in map(int, reversed(rut)):
_sum += m * d
m = 2 if m == 7 else m + 1
if (r := 11 - (_sum % 11)) == 10:
return 'K'
return '0' if r == 11 else str(r)
RUT = '12345678'
print(f'{RUT}-{checkDigit(RUT)}')
输出:
12345678-5