Java身份证号码校验算法实现
Java身份证号码校验算法实现
居民身份证号码是18位字符的编码,每个人的编码都是唯一的,校验规则如下:
∑(ai*wi)mod 11 = 1,i表示号码字符从左至右包括校验码字符在内的位置序号;ai表示第i位置上的号码字符值;Wi表示第i位置上的加权因子。即将各位上的数值乘上位权之和对11取余,余数为1则表示该编码正确。注意:如果最后一位校验码是'X'或'x',则代表该校验码的数值为10。各位的权值依次是:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2,1。
代码示例
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
scanner.nextLine(); // 读取换行符
int count = 0; // 记录正确的身份证号码的个数
for (int i = 0; i < n; i++) {
String id = scanner.nextLine();
if (isValidID(id)) {
count++;
}
}
System.out.println(count);
}
// 判断身份证号码是否正确
private static boolean isValidID(String id) {
if (id.length() != 18) {
return false;
}
int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1};
int sum = 0;
for (int i = 0; i < 17; i++) {
char c = id.charAt(i);
if (c < '0' || c > '9') {
return false;
}
int num = c - '0';
sum += num * weights[i];
}
char lastChar = id.charAt(17);
int lastNum;
if (lastChar == 'X' || lastChar == 'x') {
lastNum = 10;
} else if (lastChar >= '0' && lastChar <= '9') {
lastNum = lastChar - '0';
} else {
return false;
}
return sum % 11 == (11 - lastNum) % 11;
}
}
代码说明
isValidID方法用于判断一个字符串是否是一个合法的身份证号码。- 代码首先判断输入的身份证号码长度是否为18位,如果不是则返回
false。 - 然后,代码根据校验规则计算校验码,并与实际的校验码进行比较。如果相同,则返回
true,否则返回false。
总结
本文介绍了使用Java语言实现居民身份证号码校验的算法,包括校验规则的解释和代码示例,并提供详细的代码注释,帮助开发者快速理解和应用该算法。
原文地址: https://www.cveoy.top/t/topic/j9XB 著作权归作者所有。请勿转载和采集!