身份证号

身份证号正确、正式的称谓应该是“公民身份号码”。公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。

其中校验位的计算方法是:

1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2

2、将这17位数字和系数相乘的结果相加。

3、用加出来和模 11 ,得到数值Z(X表示 10)

下面是 Z 和校验码 M 的关系。

Z:0 1 2 3 4 5 6 7 8 9 10

M:1 0 X 9 8 7 6 5 4 3 2

如果最后一位数字和计算出来的一样则说明这个身份可能是合法的,否则一定是不合法的。

请计算出下面不合法的身份证号一共有多少个。

633846199011178461

492552192104051424

368775195008035615

181871192411235519

414267190203117695

535767199603147946

913155198306064269

339382190608143558

228518193707069252

589949196512277628

926655190203133234

359149192710266355

546763197301141876

999247195712114488

544917190503075275

82792219630912466X

967747192103045231

738595196302175723

991469195105063664

85678419031016932X

package 蓝桥杯2018年B组第四次模拟赛;

import java.util.Scanner;

public class 身份证号 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner scan=new Scanner(System.in);
        String[] strs=new String[20];
        for(int i=0;i<20;i++){
            strs[i]=scan.next();
        }
        int count=0;
        int[] nums={7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2};
        char[] results={'1', '0', 'X', '9' ,'8', '7', '6', '5', '4', '3' ,'2'};
        for(int i=0;i<20;i++){
            String str=strs[i];
            int sum=0;
            for(int j=0;j<17;j++){
                sum+=nums[j]*Integer.parseInt((str.charAt(j)+""));
            }
            if(results[sum%11]!=str.charAt(17)){
                count++;
            }
        }
        System.out.println(count);
    }

}

 

posted @ 2018-03-27 21:52  henu小白  阅读(524)  评论(0编辑  收藏  举报