|
1。本着针对接口编程,而不是针对实现编程,编写一个接口类IdCardI.JAVA,接口什么事也不干,就有一个空的Verify(String idcard);
public interface IdCardI {
// wi =2(n-1)(mod 11)
final int[] wi = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1 };
// verify digit
final int[] vi = { 1, 0, 'X', 9, 8, 7, 6, 5, 4, 3, 2 };
// verify
public boolean Verify(String idcard);
}
2.实现这个接口,编写实现类IdCard .java
public class IdCard implements IdCardI{
private int[] ai = new int[18];
// verify
public boolean Verify(String idcard) {
if (idcard.length() == 15) {
idcard = uptoeighteen(idcard);
}
if (idcard.length() != 18) {
return false;
}
String verify = idcard.substring(17, 18);
if (verify.equals(getVerify(idcard))) {
return true;
}
return false;
}
// get verify
private String getVerify(String eightcardid) {
int remaining = 0;
if (eightcardid.length() == 18) {
eightcardid = eightcardid.substring(0, 17);
}
if (eightcardid.length() == 17) {
int sum = 0;
for (int j = 0; j < 17; j++) {
String k = eightcardid.substring(j, j + 1);
ai[j] = Integer.parseInt(k);
}
for (int j = 0; j < 17; j++) {
sum = sum + wi[j] * ai[j];
}
remaining = sum % 11;
}
return remaining == 2 ? "X" : String.valueOf(vi[remaining]);
}
// 15 update to 18
private String uptoeighteen(String fifteencardid) {
String eightcardid = fifteencardid.substring(0, 6);
eightcardid = eightcardid + "19";
eightcardid = eightcardid + fifteencardid.substring(6, 15);
eightcardid = eightcardid + getVerify(eightcardid);
return eightcardid;
}
}
----------------------------------------
代码里的数组下标用i,会使字体变形,所以改成j了。
edited by powerwind
----------------------------------------
[ 本帖最后由 powerwind 于 2006-11-8 17:17 编辑 ] |
评分
-
1
查看全部评分
-
|