文章标题
来源:互联网 发布:女生性格判断 知乎 编辑:程序博客网 时间:2024/06/06 23:58
用Java写身份证第18位检验码识别
## 主要功能 ##
- 输入一个18位的身份证,验证前17位与最后一位检验码是否匹配
- 如果不匹配,就按照前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的内容
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 移动端使用localResizeIMG4压缩图片
- python实现与mysql数据库交互
- Java中String int Integer间的转换、日期的获得
- Android官方开发语言Kotlin使用-基础入门
- 策略模式的应用
- 文章标题
- 255. Verify Preorder Sequence in Binary Search Tree
- HTTP连接
- Linux-六-软件包管理-(20170518)
- 你应该掌握的七种回归技术
- 优先队列和堆排序
- 网络基础复习
- VMware虚拟机三种网络模式详解-Bridged(桥接模式)
- dp四边形优化 Hdu 3516 Tree Construction 题解