用于验证身份证号码是否正确的代码。。
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;
// 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 = Integer.parseInt(k);
}
for (int j = 0; j < 17; j++) {
sum = sum + wi * ai;
}
remaining = sum % 11;
}
return remaining == 2 ? "X" : String.valueOf(vi);
}
// 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 编辑 ] 小强好厉害啊··························
向你学校,我是小白~~~~ 可否做一解释呢??
还有,用正则表达式会不会更好呢? 外行看热闹
内行看门道 原帖由 hjack 于 2006-11-8 22:29 发表
可否做一解释呢??
还有,用正则表达式会不会更好呢?
嗯,用正则表达式做不到这么好。只能这么说 看来楼主是不懂正则的。 原帖由 lorrie 于 2006-11-9 19:03 发表
看来楼主是不懂正则的。
看样子你很懂 ~~ 原帖由 hexq 于 2006-11-9 19:45 发表
看样子你很懂 ~~
可能比你懂一点 maybe......... 楼上这个代码好长呀,比正则表达式好像便捷一点 不错,参考一下,改成php写一下~~~ 这个代码可以验证你输入的是否是真实的身份证号码,注意是真实的身份证号码~~用正则表达式的话,那匹配式不知道要写多复杂~~~
页:
[1]