) int checkID(char *ID); (7分) 判别身份证校验位是否正确的函数。其中参数 ID 代表一个 18 位身份证号,如果校验位正确,函数返回 1,否则返回 0。
时间: 2024-02-11 09:05:27 浏览: 56
pb验证身份证号输入的正确性(可以对身份证号码的第18位校验位进行判断)
以下是一个简单的实现,用于判别身份证校验位是否正确:
```
int checkID(char *ID) {
int weight[] = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
char checkCode[] = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
int sum = 0;
for (int i = 0; i < 17; i++) {
sum += (ID[i] - '0') * weight[i];
}
int index = sum % 11;
return ID[17] == checkCode[index];
}
```
这个函数的实现基于以下的校验规则:
1. 前 17 位数字分别乘以对应的权重,然后求和。
2. 将上面的和除以 11 取余数,得到一个数字。
3. 根据余数查表得到一个校验码。
4. 如果身份证号的最后一位是上面得到的校验码,那么校验成功。
注意,这个实现并没有对输入的身份证号进行任何格式检查,比如说长度是否为 18 位,前 17 位是否都是数字等等。如果需要更严格的检查,可以在函数中加入相应的代码。
阅读全文