身份证号
身份证号正确、正式的称谓应该是“公民身份号码”。公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。
其中校验位的计算方法是:
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); } }