hexq 发表于 2006-11-8 16:01

用于验证身份证号码是否正确的代码。。

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 编辑 ]

五山的阿kane 发表于 2006-11-8 17:29

小强好厉害啊··························
向你学校,我是小白~~~~

hjack 发表于 2006-11-8 22:29

可否做一解释呢??

还有,用正则表达式会不会更好呢?

joe_233 发表于 2006-11-8 22:44

外行看热闹
内行看门道

hexq 发表于 2006-11-9 18:09

原帖由 hjack 于 2006-11-8 22:29 发表
可否做一解释呢??

还有,用正则表达式会不会更好呢?
嗯,用正则表达式做不到这么好。只能这么说

lorrie 发表于 2006-11-9 19:03

看来楼主是不懂正则的。

hexq 发表于 2006-11-9 19:45

原帖由 lorrie 于 2006-11-9 19:03 发表
看来楼主是不懂正则的。
看样子你很懂 ~~

lorrie 发表于 2006-11-9 20:58

原帖由 hexq 于 2006-11-9 19:45 发表

看样子你很懂 ~~

可能比你懂一点

hexq 发表于 2006-11-10 10:09

maybe.........

活在阳光下 发表于 2006-11-10 15:27

楼上这个代码好长呀,比正则表达式好像便捷一点

x_man 发表于 2006-11-11 10:42

不错,参考一下,改成php写一下~~~

hexq 发表于 2006-11-11 16:13

这个代码可以验证你输入的是否是真实的身份证号码,注意是真实的身份证号码~~用正则表达式的话,那匹配式不知道要写多复杂~~~
页: [1]
查看完整版本: 用于验证身份证号码是否正确的代码。。