java吧 关注:1,248,803贴子:12,729,030
  • 13回复贴,共1

求大神们看一下,我这段程序哪里错了,验证身份证号码是否正确

只看楼主收藏回复

package ex;
import java.util.*;
public class SF {
public static void main(String[] args) {
Scanner console=new Scanner(System.in);
System.out.println("请输入您所需要查询的身份证号码:");
String ID =console.nextLine();
if(ID.length()!=18)
throw new IllegalArgumentException("输入的身份证为数不对!");
else if(check(ID))
{System.out.println("此身份证合法");}
else
System.out.println("此身份是假的");
}
public static boolean check(String ID)
{
int s=0;int y=0;
int []wi={7,9,10,5,8,4 ,2, 1 ,6, 3, 7, 9, 10, 5 ,8 ,4, 2, };
for(int i=1;i<18;i++)
{
s+=(ID.charAt(i-1)-'0')*wi[i-1];
}
y=s;
int n=change(y);
return ID.charAt(17)-n-'0'==0||ID.charAt(17)-n==0;
}
public static char change(int y)
{char n = 0;
switch (y)
{case 0:n=1;break; /// Y: 0 1 2 3 4 5 6 7 8 9 10
case 1:n=0;break; /// 校验码:1 0 x 9 8 7 6 5 4 3 2
case 2:n='x';break;
case 3:n=9;break;
case 4:n=8;break;
case 5:n=7;break;
case 6:n=6;break;
case 7:n=5;break;
case 8:n=4;break;
case 9:n=3;break;
case 10:n=2;break;
}
return n;
}
}


1楼2014-05-29 14:20回复
    怎么输入正确的身份证号码也是错的


    2楼2014-05-29 14:20
    回复
      木有大神


      3楼2014-05-29 14:32
      回复
        瞬间无爱了


        4楼2014-05-29 14:45
        回复
          你的change返回的类型有问题,应该都返回char型的数据,比如'1',而不是1


          IP属地:江苏5楼2014-05-29 14:50
          回复
            而且不要for 1到18,只算前17位就可以了


            IP属地:江苏6楼2014-05-29 14:51
            收起回复
              你那边的10是代表1呢还是0?有这样设定?我是不懂!


              IP属地:福建7楼2014-05-29 14:52
              收起回复
                算了,你的算法居然还不取余,change的Y是要先对11取余,不然y怎么可能等于0到10


                IP属地:江苏8楼2014-05-29 14:52
                收起回复
                  public static boolean testCertCode(String code){
                  int[] weights=new int[]{7 ,9, 10, 5, 8 ,4, 2, 1, 6, 3 ,7, 9 ,10 ,5 ,8 ,4, 2};
                  String[] last=new String[]{"1","0","X" ,"9", "8", "7", "6", "5", "4", "3", "2"};
                  char[] codes=code.toCharArray();
                  int S=0;
                  for(int i=0;i<17;i++){
                  S+=Integer.valueOf(String.valueOf(codes[i]))*weights[i];
                  }
                  int y=S%11;
                  if(codes[17]==last[y].charAt(0)){
                  return true;
                  }
                  return false;
                  }


                  IP属地:江苏9楼2014-05-29 14:53
                  回复
                    我表示楼上的做法是正确


                    IP属地:福建10楼2014-05-29 15:24
                    收起回复