文章标题

来源:互联网 发布:女生性格判断 知乎 编辑:程序博客网 时间:2024/06/06 23:58

用Java写身份证第18位检验码识别

## 主要功能 ##

  1. 输入一个18位的身份证,验证前17位与最后一位检验码是否匹配
  2. 如果不匹配,就按照前17位的数字,给出第18位的数字
public class IDCard {    String name;    String id;    /**     * 构造方法     * @param name     * @param id     */    public IDCard(String name,String id){        this.name = name;        this.id = id;    }    /**     *      * @param id 身份证号码     * @return  验证是否正确     */    boolean isIleal(String id){        if(id.length()!=18)            return false;        int N18 = 0;        String n18 = id.substring(17, 18);        if(n18.toLowerCase().equals("x")){            N18 = 10;        }else{            N18 = Integer.parseInt(id.substring(17, 18));           }        return N18==cheak(remainder(id));    }    /**     * 建议正确的身份证号码     * @param id     * @return     */    String parseId(String id){        String realN18 = String.valueOf(cheak(remainder(id)));        if(realN18.equals("10"))            realN18 = "X";        return id.replaceAll(id.substring(17, 18), realN18);    }    /**     * 将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为: *7-9-10-5-8-4-2-1-6-3-7-9-10-5-8-4-2。所得的和再除以11,所得的余数。     * @param id 身份证号码     * @return  前17位分别乘以权数后的和除以11所得的余数     */    int remainder(String id){        int[] ids = new int[18];        for(int i=0;i<17;i++){            ids[i] = Integer.parseInt(id.substring(i, i+1));        }        int sum = ids[0]*7+ids[1]*9+ids[2]*10+ids[3]*5+ids[4]*8+ids[5]*4+ids[6]*2+ids[7]*1+ids[8]*6+ids[9]*3+ids[10]*7+ids[11]*9+ids[12]*10+ids[13]*5+ids[14]*8+ids[15]*4+ids[16]*2;        int cheakN = sum % 11;        return cheakN;    }    /**     * 根据余数匹配的检验数     * @param n 余数       * @return 检验数     */    int cheak(int n){        switch(n){        case 0:            return 1;        case 1:            return 0;        case 2:            return 10;        case 3:            return 9;        case 4:            return 8;        case 5:            return 7;        case 6:            return 6;        case 7:            return 5;        case 8:            return 4;        case 9:            return 3;        case 10:            return 2;            default:                return 0;        }    }    /**     * 打印个人信息:姓名和身份证号码     */    public String toString(){        return "您输入的身份证信息如下\n"+"姓名:"+this.name+"\n身份证号:"+this.id;    }    /**     * 显示信息及更错后的信息     */    void display(){        System.out.println(this);        if(this.isIleal(this.id)){            System.out.println("验证正确!");        }else{            System.out.println("呜呜呜~~验证错误!");            System.out.println("建议输入:"+this.parseId(this.id));        }        for(int i = 0;i<5;i++)        System.out.println("");        System.out.println("Author: LvXiang@Design in NorthWest MinZu Of University ");    }    public static void main(String[] args) {        // TODO Auto-generated method stub        IDCard me = new IDCard("**","421083199411243518");        IDCard WangRangran = new IDCard("***","210782199705113829");        IDCard LiJinyang = new IDCard("***","220204199702130018");        IDCard LuFengpeng = new IDCard("***","520221199601181419");        LiJinyang.display();    }}

知识点及总结

  • String.substring(int i,int j)截取字符串方法
  • 区别String比较过程中“==”和“equals()”的区别,我在写这个代码的过程中,多次应该用到String的equals()方法,却用了“==”,导致运行后报错。“==”比较的是对象,equals()比较的是String的内容
原创粉丝点击