工大后院

 找回密码
 加入后院

扫一扫,访问微社区

QQ登录

只需一步,快速开始

搜索
查看: 2508|回复: 11

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

[复制链接]
发表于 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[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

查看全部评分

发表于 2006-11-8 17:29 | 显示全部楼层
小强好厉害啊··························
向你学校,我是小白~~~~
回复

使用道具 举报

发表于 2006-11-8 22:29 | 显示全部楼层
可否做一解释呢??

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

使用道具 举报

发表于 2006-11-8 22:44 | 显示全部楼层
外行看热闹
内行看门道
回复

使用道具 举报

 楼主| 发表于 2006-11-9 18:09 | 显示全部楼层
原帖由 hjack 于 2006-11-8 22:29 发表
可否做一解释呢??

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

嗯,用正则表达式做不到这么好。只能这么说
回复

使用道具 举报

发表于 2006-11-9 19:03 | 显示全部楼层
看来楼主是不懂正则的。
回复

使用道具 举报

 楼主| 发表于 2006-11-9 19:45 | 显示全部楼层
原帖由 lorrie 于 2006-11-9 19:03 发表
看来楼主是不懂正则的。

看样子你很懂 ~~
回复

使用道具 举报

发表于 2006-11-9 20:58 | 显示全部楼层
原帖由 hexq 于 2006-11-9 19:45 发表

看样子你很懂 ~~


可能比你懂一点
回复

使用道具 举报

 楼主| 发表于 2006-11-10 10:09 | 显示全部楼层
maybe.........
回复

使用道具 举报

发表于 2006-11-10 15:27 | 显示全部楼层
楼上这个代码好长呀,比正则表达式好像便捷一点
回复

使用道具 举报

发表于 2006-11-11 10:42 | 显示全部楼层
不错,参考一下,改成php写一下~~~
回复

使用道具 举报

 楼主| 发表于 2006-11-11 16:13 | 显示全部楼层
这个代码可以验证你输入的是否是真实的身份证号码,注意是真实的身份证号码~~用正则表达式的话,那匹配式不知道要写多复杂~~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入后院

本版积分规则

QQ|Archiver|手机版|小黑屋|广告业务Q|工大后院 ( 粤ICP备10013660号 )

GMT+8, 2025-5-15 22:52

Powered by Discuz! X3.5

Copyright © 2001-2024 Tencent Cloud.

快速回复 返回顶部 返回列表