身份证验证之简单校验

来源:互联网 发布:现在做淘宝 还行吗 编辑:程序博客网 时间:2024/06/07 14:51
import java.util.Calendar;import java.util.Scanner;public class ValidateID {   /*     * 我国现行使用公民身份证号码有两种尊循两个国家标准,〖GB 11643-1989〗和〖GB 11643-1999〗。     * 〖GB 11643-1989〗中规定的是15位身份证号码:排列顺序从左至右依次为:六位数字地址码,六位数字出生日期码,三位数字顺序码,其中出生日期码不包含世纪数。     * 〖GB 11643-1999〗中规定的是18位身份证号码:公民身份号码是特征组合码,由十七位数字本体码和一位数字校验码组成。     * 排列顺序从左至右依次为:六位数字地址码,八位数字出生日期码,三位数字顺序码和一位数字校验码。     * 地址码:表示编码对象常住户口所在县(市、旗、区)的行政区划代码。     * 出生日期码:表示编码对象出生的年、月、日,其中年份用四位数字表示,年、月、日之间不用分隔符。     * 顺序码:表示同一地址码所标识的区域范围内,对同年、同月、同日出生的人员编定的顺序号。     * 顺序码的奇数分给男性,偶数分给女性。     * 校验码:是根据前面十七位数字码,按照ISO 7064:1983.MOD 11-2校验码计算出来的检验码。     */        // 记录信息    private String info = "地区:";    public static void main(String[] args) {        new ValidateID().validateId();    }    public void validateId() {        System.out.println("输入身份证号码:");        Scanner sc = new Scanner(System.in);        String id = sc.nextLine();        // 判断是不是18位数字        if (id.length() != 18) {            System.out.println("输入的位数不对");            return;        }        // 如果含有非数字,则直接返回退出        try {            Long.parseLong(id);        } catch (Exception e) {            System.out.println("输入非数字");            return;        }        // 身份证代表省份的数字        int shengfen = Integer.parseInt(id.substring(0, 2));                //判断是否有该省份,有则获得相应信息        if(!isArea(shengfen)){            System.out.println("省份不对");            return;        }        // 获得身份证年份        int nianfen = Integer.parseInt(id.substring(6, 10));        info += "出生日期:" + nianfen + "年";        // 获得日期实例        Calendar rightNow = Calendar.getInstance();        // 获得当前年份        int MaxYear = rightNow.get(Calendar.YEAR);        if ((nianfen < 1949) && (nianfen > MaxYear)) {            System.out.println("年份不对");            return;        }        // 获得身份证月份        int yuefen = Integer.parseInt(id.substring(10, 12));        info += yuefen + "月";        // 判断月份是否正确        if ((yuefen <= 0) && (yuefen > 12)) {            System.out.println("月份错误");            return;        }        // 获得身份证日期        int riqi = Integer.parseInt(id.substring(12, 14));        info += riqi + "日";        // 判断日期是否正确        if (riqi <= 0 && riqi > 31) {            System.out.println("日期错误");            return;        }        // 获得身份证性别数字        int sex = Integer.parseInt(id.substring(16, 17));        // 奇数为男,偶数为女        if (sex % 2 == 0) {            info += "   性别:女";        } else {            info += "   性别:男";        }              System.out.println("该身份证通过验证");        // 打印身份证信息        System.out.println("信息如下");        System.out.println(info);    }        //判断该省份,并获得省份信息    public boolean isArea(int shengfen){        // 判断该省份是否存在,其中下列代码代表不同省份,可到网上查找获得        if (!((shengfen == 11) || (shengfen == 12) || (shengfen == 13)                || (shengfen == 14) || (shengfen == 15) || (shengfen == 21)                || (shengfen == 22) || (shengfen == 23) || (shengfen == 31)                || (shengfen == 32) || (shengfen == 33) || (shengfen == 34)                || (shengfen == 35) || (shengfen == 36) || (shengfen == 37)                || (shengfen == 41) || (shengfen == 42) || (shengfen == 43)                || (shengfen == 44) || (shengfen == 45) || (shengfen == 46)                || (shengfen == 50) || (shengfen == 51) || (shengfen == 52)                || (shengfen == 53) || (shengfen == 54) || (shengfen == 61)                || (shengfen == 62) || (shengfen == 63) || (shengfen == 64)                || (shengfen == 65) || (shengfen == 71) || (shengfen == 81) || (shengfen == 82))) {            System.out.println("省份不对");            return false;        }                if (shengfen == 11) {            info += "北京    ";        }        if (shengfen == 12) {            info += "天津    ";        }        if (shengfen == 13) {            info += "河北    ";        }        if (shengfen == 14) {            info += "山西    ";        }        if (shengfen == 15) {            info += "内蒙古    ";        }        if (shengfen == 21) {            info += "辽宁    ";        }        if (shengfen == 22) {            info += "吉林    ";        }        if (shengfen == 23) {            info += "黑龙江    ";        }        if (shengfen == 31) {            info += "上海    ";        }        if (shengfen == 32) {            info += "江苏    ";        }        if (shengfen == 33) {            info += "浙江    ";        }        if (shengfen == 34) {            info += "安徽    ";        }        if (shengfen == 35) {            info += "福建    ";        }        if (shengfen == 36) {            info += "江西    ";        }        if (shengfen == 37) {            info += "山东    ";        }        if (shengfen == 41) {            info += "河南    ";        }        if (shengfen == 42) {            info += "湖北    ";        }        if (shengfen == 43) {            info += "湖南    ";        }        if (shengfen == 44) {            info += "广东    ";        }        if (shengfen == 45) {            info += "广西壮族自治区    ";        }        if (shengfen == 46) {            info += "海南    ";        }        if (shengfen == 50) {            info += "重庆    ";        }        if (shengfen == 51) {            info += "四川    ";        }        if (shengfen == 52) {            info += "贵州    ";        }        if (shengfen == 53) {            info += "云南    ";        }        if (shengfen == 54) {            info += "西藏自治区    ";        }        if (shengfen == 61) {            info += "陕西    ";        }        if (shengfen == 62) {            info += "甘肃    ";        }        if (shengfen == 63) {            info += "青海    ";        }        if (shengfen == 64) {            info += "宁夏回族自治区    ";        }        if (shengfen == 65) {            info += "新疆维吾尔族自治区    ";        }        if (shengfen == 71) {            info += "台湾    ";        }        if (shengfen == 81) {            info += "香港特别行政区    ";        }        if (shengfen == 82) {            info += "澳门特别行政区    ";        }        return true;    }}

原创粉丝点击