查验身份证(15)
【思路】每输入一行字符串就开始对前17位进行校验。前17里的X不用管,因为有X的话算出来的是没有对应校验位的。
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
boolean isAllPassed = true;
for(int i=0; i<n; i++){
String number = sc.next();
if(!check(number.substring(0,17), number.charAt(17))){
isAllPassed = false;
System.out.println(number);
}
}
if(isAllPassed){
System.out.println("All passed");
}
}
//判断加权求和除11的余是否与最后一位相同
public static boolean check(String sub , char m){
int[] value = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2 };
int sum = 0;
//加权求和
//前17里的X不用管,因为有X的话算出来的是没有对应校验位的
for(int i=0; i<sub.length(); i++){
sum = sum + value[i] * (sub.charAt(i) - '0');
}
char[] z = { '1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2' };
if(m == z[sum%11]){
//身份证号最后一位与加权求和除11的余相同
return true;
}
return false;
}
}

海康威视公司福利 1179人发布