请用JAVA语言输入18位身份证号码,验证是否合法的身份证号
时间: 2024-09-26 11:10:15 浏览: 91
在Java中,你可以创建一个函数来验证18位的中国大陆身份证号码是否合法。身份证号码的校验规则相对复杂,涉及到数字和字符的组合以及特定算法。下面是一个简单的示例,使用正则表达式来初步判断格式,而校验码部分则需要一个单独的计算过程:
```java
import java.util.regex.Pattern;
public class IDCardValidator {
private static final String regex = "(^\d{15}$)|(^\\d{17}(\\d|X|x)$)";
// 更复杂的校验算法可以在此处添加
public static boolean isValid(String idCard) {
if (idCard == null || idCard.isEmpty()) return false;
Pattern pattern = Pattern.compile(regex);
return pattern.matcher(idCard).matches();
}
public static void main(String[] args) {
String inputId = "123456789012345678";
System.out.println(isValid(inputId)); // 输出true或false
}
}
相关问题
用Java语言编写判断输入字符是否符合身份证号码规则
在Java中,判断输入字符是否符合中国身份证号码规则,需要编写一段正则表达式验证程序。中国的身份证号码通常由18位数字组成,分为三组:前6位是行政区划码,接下来8位是出生日期码,最后4位是顺序码加校验码。校验码的计算有一定的算法,需要用到X或Y。
以下是简单的Java代码示例:
```java
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class IDCardValidator {
private static final String regex = "^\\d{15}$"; // 基本格式,18位数不包含校验码的情况
private static final String regexWithCheckCode = "^\\d{18}$"; // 包含校验码的情况
public static boolean isValid(String id) {
if (id.matches(regex)) {
return validateWithoutCheckCode(id);
} else if (id.matches(regexWithCheckCode)) {
int sum = 0;
for (int i = 1; i <= 17; i++) {
sum += Integer.parseInt(id.substring(i, i + 1)) * (i % 2 == 0 ? 7 : 9);
}
int checkCode = ((sum % 11) > 10 ? 10 : sum % 11);
return checkCode == Integer.parseInt(id.charAt(17));
}
return false;
}
private static boolean validateWithoutCheckCode(String id) {
// 实现更复杂的规则,如检查行政区划码等,这里简化为仅验证长度
return id.length() == 15;
}
public static void main(String[] args) {
System.out.println(isValid("123456789012345678")); // 输出true或false
}
}
```
在这个例子中,`isValid`方法首先检查基本的15位数字格式,如果匹配,则进一步校验无校验码部分。如果输入是18位,它会计算校验码并检查其是否与输入一致。
使用java语言编写验证身份证的程序
以下是使用Java语言编写验证身份证的程序的示例代码:
```java
import java.util.Scanner;
public class ValidateIDCard {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入身份证号码:");
String idCard = scanner.nextLine();
if (isValidIDCard(idCard)) {
System.out.println("身份证号码有效!");
} else {
System.out.println("身份证号码无效!");
}
}
/**
* 验证身份证号码是否有效
*
* @param idCard 身份证号码
* @return true表示有效,false表示无效
*/
public static boolean isValidIDCard(String idCard) {
if (idCard == null || idCard.length() != 18) {
return false;
}
// 获取前17位
String idCard17 = idCard.substring(0, 17);
// 获取第18位
char idCard18 = idCard.charAt(17);
if (!isDigit(idCard17)) {
return false;
}
// 年份
int year = Integer.parseInt(idCard.substring(6, 10));
// 月份
int month = Integer.parseInt(idCard.substring(10, 12));
// 日
int day = Integer.parseInt(idCard.substring(12, 14));
if (!isValidDate(year, month, day)) {
return false;
}
// 系数数组
int[] factors = new int[]{7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
// 校验码数组
char[] verificationCodes = new char[]{'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
// 加权和
int sum = 0;
for (int i = 0; i < idCard17.length(); i++) {
sum += (idCard17.charAt(i) - '0') * factors[i];
}
// 余数
int remainder = sum % 11;
// 校验码
char verificationCode = verificationCodes[remainder];
return verificationCode == idCard18;
}
/**
* 判断字符串是否为数字
*
* @param str 字符串
* @return true表示是数字,false表示不是数字
*/
public static boolean isDigit(String str) {
if (str == null || str.length() == 0) {
return false;
}
for (int i = 0; i < str.length(); i++) {
if (str.charAt(i) < '0' || str.charAt(i) > '9') {
return false;
}
}
return true;
}
/**
* 判断日期是否有效
*
* @param year 年份
* @param month 月份
* @param day 日
* @return true表示有效,false表示无效
*/
public static boolean isValidDate(int year, int month, int day) {
if (year < 1900 || year > 2999) {
return false;
}
if (month < 1 || month > 12) {
return false;
}
int[] daysOfMonth = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
if (isLeapYear(year)) {
daysOfMonth[1] = 29;
}
if (day < 1 || day > daysOfMonth[month - 1]) {
return false;
}
return true;
}
/**
* 判断是否为闰年
*
* @param year 年份
* @return true表示是闰年,false表示不是闰年
*/
public static boolean isLeapYear(int year) {
return (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
}
}
```
该程序首先提示用户输入身份证号码,然后调用isValidIDCard方法验证该身份证号码是否有效。
isValidIDCard方法首先判断身份证号码是否为空或长度不为18,如果是则返回false。然后获取身份证号码的前17位和第18位,分别进行验证。前17位必须是数字,否则返回false;后面的校验码需要根据前面17位的加权和计算得出,如果计算得出的校验码与身份证号码的第18位不一致,则返回false。
isDigit方法用于判断一个字符串是否为数字,isValidDate方法用于判断一个日期是否有效,isLeapYear方法用于判断一个年份是否为闰年。
阅读全文
相关推荐
















