提问人:NiKiuS 提问时间:10/2/2023 最后编辑:NiKiuS 更新时间:10/2/2023 访问量:43
有没有更好的方法来计算智利 RUT 验证位?
Is there a better way to calculate Chilean RUT verification digit?
问:
对于那些不知道的人,智利 RUT 是居民的 ID,类似于 USCIS#,由 7-8 个数字后跟一个验证位组成(通过一种 MOD11 检查计算)。
我制作了下一个 python 代码来使用 python 列表获取该数字,但我需要询问是否有更好、最新、更智能或更短的方法来获取它。
使用的 MOD11 算法:
- 8 位数字的 ID 号
- 反转它
- 将每个数字乘以 2,3,4,5,6,7,2,3(我使用 10 长度的数字来尝试更大的数字)
- 将乘以的值相加并计算模量(%)除以 11
- 验证数字为 11 - 模数
- 如果数字为 10,则显示“K”,如果数字为 11,则显示“0”。
法典:
# 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
答:
1赞
CtrlZ
10/2/2023
#1
首先,应使函数的返回类型保持一致。
您可以使用 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
上一个:测试字符串是否包含重复字符
评论