Java编写程序判断身份证是否合法 |
您所在的位置:网站首页 › 该用户的18位身份证在系统中已存在怎么解决 › Java编写程序判断身份证是否合法 |
Java编写程序判断身份证是否合法
需求
我国的居民身份证号码,由十七位数字本体码和一位数字校验码组成。定义方法判断用户输入的身份证号码是否合法,并在主方法中调用方法测试结果。规则为:号码为18位,不能以数字0开头,前17位只可以是数字,最后一位可以是数字或者大写字母X。 设计思路使用键盘录入一个身份证号字符串,定义一个方法接收。查看String类的相关API,遍历该字符串进行判断。 代码实现 package com.itheima.APITest.Test06; import java.util.Scanner; /* 我国的居民身份证号码,由由十七位数字本体码和一位数字校验码组成。 请定义方法判断用户输入的身份证号码是否合法, 并在主方法中调用方法测试结果。 规则为:号码为18位,不能以数字0开头, 前17位只可以是数字, 最后一位可以是数字或者大写字母X。 */ public class Demo { public static void main(String[] args) { //创建Scanne对象,接收键盘录入 //public final class Scanner //一个简单的文本扫描器,可以使用正则表达式解析原始类型和字符串。 //public final class System //System类包含几个有用的类字段和方法。 它不能被实例化。 //public static final InputStream in //“标准”输入流。 该流已经打开,准备提供输入数据。 通常,该流对应于键盘输入或由主机环境或用户指定的另一个输入源。 Scanner sc = new Scanner(System.in); //public static final PrintStream out //“标准”输出流。 此流已经打开并准备好接受输出数据。 通常,此流对应于显示输出或由主机环境或用户指定的另一个输出目标。 //public class PrintStream // PrintStream将功能添加到另一个输出流,即能够方便地打印各种数据值的表示。 还提供了另外两个功能。 //public void println() //通过写入行分隔符字符串来终止当前行。 行分隔符字符串由系统属性line.separator定义,并不一定是单个换行符( '\n' )。 System.out.println("请输入一个身份证号:"); //接收键盘录入的字符串 //public String nextLine() //将此扫描仪推进到当前行并返回跳过的输入。 此方法返回当前行的其余部分,不包括末尾的任何行分隔符。 该位置设置为下一行的开头。 String id = sc.nextLine(); //调用判断身份证号码的方法 boolean b = judgeIDNumber(id); //输出结果 System.out.println(b); } public static boolean judgeIDNumber(String s) { //判断长度不是18,直接返回false //public int length() //返回此字符串的长度。 长度等于字符串中的数字Unicode code units 。 if (s.length() != 18) { return false; } else { //判断开头数字为0,直接false //public char charAt(int index) //返回指定索引处的char值。 指数范围从0到length() - 1 。 序列的第一个char值是索引0 ,下一个索引为1 ,依此类推,就像数组索引一样。 if (s.charAt(0) == '0') { return false; } //遍历字符串 for (int i = 0; i //如果字符在数字之外直接false if (s.charAt(i) '9') { return false; } } else { //第十七位如果不是数字或者大写字母X返回false if (s.charAt(i) '9') { if (s.charAt(i) != 'X') { return false; } } } } } //以上条件都不满足时返回true,是合法的身份证号 return true; } } 代码实现2为了程序的健壮性,我们需要对传递的参数是否为空参进行判断,判断字符串的开头是否为数字0,我们有相应的API,基于以上,对程序进行二次优化。 package com.itheima.APITest.Test06; import java.util.Scanner; /* 为了程序的健壮性,对空参进行判断。 判断字符串的开头有相应的方法,对程序结构进行优化。 */ public class Demo02 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一个身份证号:"); String id = sc.nextLine(); System.out.println(checkID(id)); } public static boolean checkID(String s) { //空参判断,保证程序健壮性 if (s == null) { return false; } //判断长度 if (s.length() != 18) { return false; } //public boolean startsWith(String prefix) //测试此字符串是否以指定的前缀开头。 if (s.startsWith("0")) { return false; } //遍历字符串 for (int i = 0; i //优化程序,改变逻辑判断 if (ch '9' && ch != 'X') { return false; } } else {//其他位的校验 if (ch '9') { return false; } } } //以上都不符合,返回true return true; } } 效果展示 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |