java吧 关注:1,263,541贴子:12,762,985
  • 0回复贴,共1

小弟求JAVA高手,解释哈下面每句程序的意思。。。。

只看楼主收藏回复


从键盘上输入一个身份证号码:回车之后,判断是否为正确号码(位数、有无字符);如果正确,则判断他是旧号码(15位)还是新号码(18位),如果是旧号码,把它转化为新号码;如果是新号码,打印出该人的生日和性别。
注意旧号码转新号码的规则:
(1) 年份由两位变成四位;
(2) 最后一位为效验码。效验码的公式为:(∑(ai×wi))%11
其中:i是从右向左的包括效验码在内的序号(1-18)
ai是第i位上号码的字符值
wi是第i位上的加权因子,其数值依据公式wi=(2(i-1))%11
求出(∑(ai×wi))%11之后依据下表得到效验码:
(∑(ai×wi))%11
0
1
2
3
4
5
6
7
8
9
10
效验码值
1
0
X
9
8
7
6
5
4
3
2
(3)计算ab:函数为:java.lang.Math.pow(a,b)
(4)判断是否整数:函数为:java.lang.Integer.parseInt(String str)
import java.util.*; public class IdentityNumber { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in);
String input = stdIn.nextLine();
int length = input.length();
for (int i = 0; i < length; i++) { char c = input.charAt(i);
if (i != 17 && (c < '0' || c > '9')
|| i == 17 && !(c >= '0' && c <= '9' || c == 'x' || c == 'X')) { System.out.println("输入格式不正确!");
System.exit(0);
}
}
if (length == 18) { System.out.println("此号码是新号码。");
} else if (length == 15) { input = input.substring(0, 6) + 19 + input.substring(6, 15);
System.out.print("此号码是旧号码。转化为新号码为:");
int[] weights = {7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
int checksum = 0;
for (int i = 0; i < 17; i++) { checksum += (input.charAt(i) - '0') * weights[i];
}
checksum %= 11;
if (checksum < 2) { checksum = 1 - checksum;
} else { checksum = 12 - checksum;
}
input += checksum < 10 ? checksum : "X";
System.out.println(input);
} else { System.out.println("输入格式不正确!");
System.exit(0);
}
System.out.println("生日为:" + input.substring(6, 10) + "年"
+ input.substring(10, 12) + "月" + input.substring(12, 14) + "日");
System.out.println("性别为:" + ((input.charAt(16) - '0') % 2 == 1 ? "男" : "女"));
}
}



1楼2012-05-15 11:04回复