身份校验码python计算公式
时间: 2023-05-25 18:04:14 浏览: 133
对于身份证号码而言,校验码的计算过程如下:
1. 将身份证号码前17位存放在一维数组中,分别乘以对应的权值(权值从左到右依次为:7、9、10、5、8、4、2、1、6、3、7、9、10、5、8、4、2),其中以第17位为奇数的性质来确定最后一位可采用系统给定的校验码,以保证计算的正确性。
2. 将乘积求和,得到sum。
3. sum除以11,得到余数为r。
4. 根据余数r来对应一个校验码(校验码列表为:1、0、X、9、8、7、6、5、4、3、2)。
5. 如果第17位与上一步计算得到的校验码相同,则说明身份证号码有效。
下面是Python代码实现:
```
def check_id(id_num):
weights = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
check_codes = ['1','0','X','9','8','7','6','5','4','3','2']
multi_sum = sum([int(id_num[i])*weights[i] for i in range(17)])
remainder = multi_sum % 11
if id_num[-1] == check_codes[remainder]:
return True
else:
return False
```
相关问题
luhn算法python实现
Luhn算法,也被称为模10算法(Modulus 10 algorithm),是一种简单的校验和公式,用于验证各种身份识别码,如信用卡号码。其算法过程大致如下:
1. 从数字的最后一个开始向左,跳过第一个数字(通常是校验位),然后每个偶数位置上的数字(倒数第二位、倒数第四位等)乘以2。
2. 如果乘以2的结果大于9,则将该结果拆分为两个数字的和,例如14变成1和4。
3. 将所有偶数位置上的数字(包括拆分后的结果)与奇数位置上的数字相加。
4. 计算总和的模10,如果结果为0,则认为校验通过。
Python实现Luhn算法的示例代码如下:
```python
def luhn_checksum(card_number):
def digits_of(n):
return [int(d) for d in str(n)]
digits = digits_of(card_number)
odd_digits = digits[-1::-2]
even_digits = digits[-2::-2]
checksum = sum(odd_digits)
for d in even_digits:
checksum += sum(digits_of(d*2))
return checksum % 10
def is_luhn_valid(card_number):
return luhn_checksum(card_number) == 0
# 使用示例
card_number = 1234567890123456
print(is_luhn_valid(card_number)) # 输出:True 或 False
```
阅读全文