查验身份证(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;
    }
}


全部评论

相关推荐

听说改名字就能收到offer哈:Radis写错了兄弟
点赞 评论 收藏
分享
11-18 15:57
门头沟学院 Java
最终归宿是测开:这个重邮的大佬在重邮很有名的,他就喜欢打92的脸,越有人质疑他,他越觉得爽😂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务