身份证号码的验证规则如下: 1) 将身份证号码前17位数字分别乘以不同的系数。第1位到第17位的系数分别是: (7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2) 2) 将上述步骤17个结果相加,记为s1; 3) 用s1除以11,看余数是多少; 4) 余数只可能是0,1,2,3,4,5,6,7,8,9,10共11个数字, 依次对应('1','0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'),得到的对应字符就是身份证号码最后一位。 例如:如果余数为2,则身份证号码最后一位就是X 5) 如果上述转换结果和输入的身份证号码最后一位相同,则验证通过,否则验证不通过。 编写一个函数,验证身份证号码,如果通过则返回'pass',否则返回'error' 主程序输入n个身份证号码,对每个身份证号码进行验证。 输入: 第一行输入一个整数n,代表n个身份证号码 依次输入n行,每一行输入一个身份证号码 本题保证输入的n大于0,且每个身份证号码是18位。即无需考虑异常的输入数据。 输出: 输出n行验证结果,每行输出一个元组:(身份证号码,pass或error) 输入样例: 2 370283198611283516 620102200312015338 输出样例: ('370283198611283516', 'pass') ('620102200312015338', 'error'),请帮我写出满分python代码答案
时间: 2024-01-02 19:04:11 浏览: 273
以下是满分Python代码:
```python
def verify_id(id_number):
factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
s1 = sum([int(id_number[i]) * factors[i] for i in range(17)])
check_code_list = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
check_code = check_code_list[s1 % 11]
if check_code == id_number[17]:
return 'pass'
else:
return 'error'
n = int(input())
for i in range(n):
id_number = input().strip()
result = verify_id(id_number)
print((id_number, result))
```
其中,`verify_id`函数用于验证身份证号码,输入为一个字符串类型的身份证号码,输出为字符串类型的验证结果,即'pass'或'error'。主程序中,先输入身份证号码的个数n,然后依次输入n个身份证号码,并对每个身份证号码进行验证,最后输出验证结果。
相关问题
python代码写验证身份证号是否为真。 附录: 身份证号码中的校验码是身份证号码的最后一位。公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码,最后一位是数字校验码。 身份证校验码的计算方法如下: 1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 2、将这17位数字和对应的系数各自相乘的结果相加; 3、用加出来的和除以11,看余数是多少; 4、余数只可能是0 1 2 3 4 5 6 7 8 9 10这11个数字中的一个。这些余数分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;
以下是Python代码实现身份证号码校验:
```python
def verify_id_number(id_number):
# 加权因子
weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
# 校验码对应值
check_code = ['1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2']
# 将身份证号码转换为数组,方便取值
id_number_list = list(id_number)
# 判断身份证号码长度是否为18位
if len(id_number) != 18:
return False
# 前17位数值相乘求和
total = sum([int(id_number_list[i]) * weight_factor[i] for i in range(17)])
# 取余数
remainder = total % 11
# 判断校验码是否正确
if check_code[remainder] != id_number_list[-1]:
return False
return True
```
使用方法:
```python
id_number = 'xxxxxxxxxxxxxxxxx' # 18位身份证号码
is_valid = verify_id_number(id_number)
if is_valid:
print('身份证号码正确')
else:
print('身份证号码错误')
```
注意:身份证号码中的x代表数字,具体的数字需要根据实际情况替换。
开发一个HTML 文档,用于收集用户的以下信息:姓名(大于2个 字符,少于20字符)、身份证号(格式:SSSFFFYYYYMMRRNNNC) 以及体重(限制范围为40~150kg)。必须针对这些表单元素创建事件 处理程序,来检查所收集的信息是否正确。当检测到错误时,使 用alert 窗口来显示错误消息。 注:身份证号格式说明 SSSFFF:6位地址号(0-9) YYYYMMRR:8位生日(年月日) NNN:3顺序号(0-9) C:1位校验码 注:身份证最后一位校验码算法如下: 1) 将身份证号码前17位数分别乘以不同的系数,从第1位到第17 位的系数分别为: 7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2 2) 将得到的17个乘积相加。 3) 将相加后的和除以11并得到余数。 4) 余数可能为 0,1,2,3,4,5,6,7,8,9,10 ,其对应的 身份证最后一位校验码为 1,0,X,9,8,7,6,5,4,3,2
好的,我可以帮你解答这个问题。
你需要创建一个HTML文档,包含以下表单元素:姓名、身份证号和体重。为了检查用户输入的信息是否正确,你需要创建事件处理程序。
首先,让我们来创建HTML文档。你可以使用以下代码:
```
<!DOCTYPE html>
<html>
<head>
<title>User Information Form</title>
</head>
<body>
<h1>User Information Form</h1>
<form>
<label for="name">Name:</label>
<input type="text" id="name" name="name" required minlength="2" maxlength="20"><br><br>
<label for="id">ID Number:</label>
<input type="text" id="id" name="id" required pattern="[0-9]{6}[0-9]{4}[0-9]{2}[0-9]{2}[0-9]{3}[0-9xX]{1}"><br><br>
<label for="weight">Weight:</label>
<input type="number" id="weight" name="weight" required min="40" max="150"><br><br>
<input type="submit" value="Submit">
</form>
</body>
</html>
```
在这个HTML文档中,我们创建了一个表单,其中包含三个表单元素:姓名、身份证号和体重。我们使用`<label>`元素来为每个表单元素添加标签,并用`<input>`元素创建文本框和数字框。我们还添加了一些属性来限制输入和确保输入字段的必填属性。
接下来,我们需要创建事件处理程序来检查用户输入的信息是否正确。我们可以使用JavaScript来实现这一点。下面是一个示例代码:
```
function validate() {
// Get user inputs
var name = document.getElementById("name").value;
var idNumber = document.getElementById("id").value;
var weight = document.getElementById("weight").value;
// Validate name
if (name.length < 2 || name.length > 20) {
alert("Name must be between 2 and 20 characters.");
return false;
}
// Validate ID number
var factors = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2];
var sum = 0;
for (var i = 0; i < 17; i++) {
sum += factors[i] * parseInt(idNumber.charAt(i));
}
var remainder = sum % 11;
var checkCode = "";
switch(remainder){
case 0:
checkCode = "1";
break;
case 1:
checkCode = "0";
break;
case 2:
checkCode = "X";
break;
case 3:
checkCode = "9";
break;
case 4:
checkCode = "8";
break;
case 5:
checkCode = "7";
break;
case 6:
checkCode = "6";
break;
case 7:
checkCode = "5";
break;
case 8:
checkCode = "4";
break;
case 9:
checkCode = "3";
break;
case 10:
checkCode = "2";
break;
}
if (idNumber.charAt(17).toUpperCase() !== checkCode) {
alert("Invalid ID number.");
return false;
}
// Validate weight
if (weight < 40 || weight > 150) {
alert("Weight must be between 40 and 150 kg.");
return false;
}
return true;
}
document.querySelector("form").addEventListener("submit", function(event) {
event.preventDefault();
if (validate()) {
alert("Form submitted successfully.");
}
});
```
在这个示例代码中,我们创建了一个名为`validate()`的函数来检查用户输入的信息是否正确。首先,我们获取用户输入的姓名、身份证号和体重。然后,我们对每个输入字段进行验证。
对于姓名,我们检查其长度是否在2和20个字符之间。
对于身份证号,我们按照算法进行校验。首先,我们将前17位数字分别乘以不同的系数,并将结果相加。然后,我们将相加后的和除以11并得到余数。最后,我们根据余数计算身份证号的最后一位校验码,并将其与用户输入的校验码进行比较。
对于体重,我们检查其是否在40和150之间。
最后,我们在表单的提交事件上添加了一个事件监听器。在事件处理程序中,我们首先调用`validate()`函数来检查用户输入的信息是否正确。如果验证通过,我们显示一个成功消息。如果验证失败,我们使用`alert()`函数来显示一个错误消息,并阻止表单的提交。
希望这可以帮助你解决你的问题!
阅读全文