根据身份证号校验年龄是否在16到80岁demo
时间: 2024-03-05 16:51:57 浏览: 60
好的,以下是一个根据身份证号校验年龄是否在16到80岁的 Python 示例代码:
```python
import datetime
def check_age(id_num):
# 根据身份证号获取出生日期
birth_year = int(id_num[6:10])
birth_month = int(id_num[10:12])
birth_day = int(id_num[12:14])
birth_date = datetime.date(birth_year, birth_month, birth_day)
# 计算年龄
today = datetime.date.today()
age = today.year - birth_date.year - ((today.month, today.day) < (birth_date.month, birth_date.day))
# 判断年龄是否在16到80岁之间
if age >= 16 and age <= 80:
return True
else:
return False
```
你可以将身份证号作为参数传递给 `check_age()` 函数,函数会返回一个布尔值,表示该身份证号对应的年龄是否在16到80岁之间。
相关问题
python身份证号码校验
以下是Python代码,用于验证中国身份证号码的有效性:
```
def validate_id_number(id_number):
# 正则表达式匹配身份证号码格式
pattern = r'^[1-9]\d{5}(19\d{2}|20[0-2]\d)(0[1-9]|1[0-2])(0[1-9]|[1-2]\d|3[0-1])\d{3}([0-9]|X)$'
if not re.match(pattern, id_number):
return False
# 加权因子和校验码对应值
weight_factor = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2]
check_code = {'0': '1', '1': '0', '2': 'X', '3': '9', '4': '8', '5': '7', '6': '6', '7': '5', '8': '4', '9': '3', '10': '2'}
# 计算校验码
check_sum = 0
for i in range(len(id_number) - 1):
check_sum += int(id_number[i]) * weight_factor[i]
check_code_number = check_sum % 11
check_code_value = check_code[str(check_code_number)]
# 校验身份证号码最后一位是否正确
if id_number[-1] == check_code_value:
return True
else:
return False
```
该函数接受一个字符串参数 id_number,表示要验证的身份证号码。如果该身份证号码格式正确且校验码也正确,则返回 True,否则返回 False。
java身份证号码校验
在Java中,对身份证号码进行校验通常会检查其结构是否符合规定的18位或15位数字规则,并通过算法验证其中包含的校验码。中国身份证号码有固定格式,前6位代表地区,接下来8位代表出生日期,倒数第2位是性别标识(奇数为男,偶数为女),最后一位是根据前面的信息计算出来的校验码。
常见的校验算法包括:
1. 第17位单向校验码:利用特定公式计算得到,根据奇偶性有不同的计算规则。
2. 第18位校验码:对于18位号码,有时会出现X代替0的情况,这是为了防止输入错误。校验时需要考虑这个特殊规则。
下面是一个简单的例子,展示如何使用正则表达式配合计算校验码:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IDValidator {
private static final String[] WEIGHTS = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
private static final Pattern ID_PATTERN = Pattern.compile("\\d{15}(\\d|X|x)?");
public static boolean isValid(String id) {
Matcher matcher = ID_PATTERN.matcher(id);
if (!matcher.matches()) return false;
int sum = 0;
for (int i = 0; i < 17; i++) {
int digit = Character.getNumericValue(id.charAt(i)) * WEIGHTS[i];
sum += digit;
}
if (id.length() == 18 && id.charAt(17) != 'X') {
int lastDigit = Character.getNumericValue(id.charAt(17));
return (sum % 11 == lastDigit);
} else {
return sum % 11 == 0; // 对于15位号码,直接除以11看余数是否为0
}
}
public static void main(String[] args) {
System.out.println(isValid("123456789012345678")); // 输出:true 或 false
}
}
```
阅读全文