有没有更好的方法计算智利RUT验证位数?

问题描述 投票:0回答:1

对于那些不知道的人来说,智利RUT是居民的ID,类似于USCIS#,由7-8个数字组成,后跟验证数字(通过MOD11检查类型计算)。

我编写了下一个Python代码来使用Python列表获取该数字,但我需要询问是否有更好、最新、更智能或更短的方法来获取它。

使用MOD11算法:

  1. 8位身份证号码
  2. 反转
  3. 将每个数字乘以2,3,4,5,6,7,2,3(我使用10长度的数字来尝试更大的数字)
  4. 将相乘的值相加并计算除以11的模数(%)
  5. 验证数字为11-模数
  6. 数字为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
python verification digits
1个回答
0
投票

首先,你应该使函数的返回类型保持一致。

您可以使用 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
© www.soinside.com 2019 - 2024. All rights reserved.