java用正则表达式判断一个18位身份证号是否有效

作者&投稿:尚婉 (若有异议请与网页底部的电邮联系)
使用java判断输入身份证号位数是否正确,判断输入是否有效~

public static void getString(){
String a,b;
while (true) {
Scanner input = new Scanner(System.in);
System.out.println("请输入您的18位身份证号码!!");
a = (String) input.next();
if (a.length() == 18) {
a.matches("/D");
b = a.substring(6, 14);
System.out.println("请的出生日期为:" + b);
if(a.charAt(16)%2 == 0)
{
System.out.println("您的性别是女性!");
}else{
System.out.println("您的性别是男性!");
}
} else {
System.out.println("您输入的身份证错误!!");
}
}
}

处理方法:
如果只是简单判断 r = /^(\d{18}|\d{17}x)$/,只需要判断18位数字活着17位数字+一位x。
1、介绍:
xxxxxx yyyy MM dd 375 0 十八位
xxxxxx yy MM dd 75 0 十五位
2、地区: [1-9]\d{5}
3、年的前两位: (18|19|([23]\d))
4、年的后两位: \d{2}
5、月份: ((0[1-9])|(10|11|12))
6、天数: (([0-2][1-9])|10|20|30|31)
7、三位顺序码: \d{3}
8、两位顺序码: \d{2}
9、校验码: [0-9Xx]

很显然 是你得正则表达式不对啊,正确的18位身份证验证正则为:

String regex = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";		

而且就算正则表达式正确了,你的逻辑判断代码也是有问题,

完成代码如下,请参考:

public class Homework {
public static void main(String[] args) {
String regex = "^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$";
System.out.println("请输入18位的身份证号码:");
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
if (s.matches(regex)) {
int y1, y2;
String year1 = s.substring(6, 8);
y1 = Integer.parseInt(year1);
String year2 = s.substring(8, 10);
y2 = Integer.parseInt(year2);
if ((y1 == 18 && y2 >= 87 && y2 <= 89)
|| (y1 == 19 && y2 >= 0 && y2 <= 99)
|| (y1 == 20 && y2 <= 17)) {
int m, d;
String month = s.substring(10, 12);
m = Integer.parseInt(month);
String day = s.substring(12, 14);
d = Integer.parseInt(day);
if ((m == 1 || m == 3 || m == 5 || m == 7 || m == 8 || m == 10 || m == 12)
&& (d == 31))
System.out.println("有效");
else if ((m == 4 || m == 6 || m == 9 || m == 11) && (d == 30))
System.out.println("有效");
else if (m == 2) {
int y;
String year = s.substring(6, 10);
y = Integer.parseInt(year);
if (((y % 4 == 0 && y % 100 != 0) || y % 400 == 0)
&& (d == 29))
System.out.println("有效");
else if (((y % 4 != 0 && y % 100 == 0) || y % 400 != 0)
&& (d == 28))
System.out.println("有效");
else
System.out.println("无效");
return;
} else {
System.out.println("无效");
return;
}
int ss;
String sex = s.substring(16, 17);
ss = Integer.parseInt(sex);
if (ss % 2 == 0)
System.out.println("女性");
else
System.out.println("男性");
} else
System.out.println("无效");
} else
System.out.println("无效");
}
}


你这不是身份证的正则,这正则也太随意了,【1-9】没问题,但\d{17}有问题,\d是0-9的数字,但身份证的第7位开始就是出生日期,第7位8位肯定是19或20,接的几位也有限定,但你一个\d完全没有限定值,出生日期0000也可以取到。
/^[1-9][0-9]{5}(19|20)[0-9]{2}((01|03|05|07|08|10|12)(0[1-9]|[1-2][0-9]|31)|(04|06|09|11)(0[1-9]|[1-2][0-9]|30)|02(0[1-9]|[1-2][0-9]))[0-9]{3}([0-9]|x|X)$/

d{16}x" 这里引号前少了个)

杂诗(佚名)

isIDCard2=/^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;


Java培训班一般都教什么内容?
Java培训一般会教下面四种内容:1、掌握Java语言的使用:语言语法、程序逻辑,OOP(面向对象)思想,封装、继承、多态,集合框架、泛型、File I\\O技术,多线程技术、socket网络编程,XML技术。编程有关的操作系统基本使用,HTML5规范、HTML5文档结构、HTML5元素、Web语义化;CSS3规范、CSS3选择器、层叠与...

目前最流行的编程语言是哪个,我是做PHP的
python和java吧

java学习作为一名java初学者,如何快速学习j
想要快速学习Java建议去【达内教育】学习,该机构26大课程体系紧跟企业需求,企业级项目,课程穿插大厂真实项目讲解,对标企业人才标准,制定专业学习计划,囊括主流热点技术。JAVA快速入门的方法:1、时刻提醒自己Java是一种OOP语言工具,而不仅仅是编码,只有这样才能总体把握和运用Java。2、在学习的过程中,...

Java学习安排!
(设计模式,数据结构和算法才是真正的精髓,要有很多年的编程经验才能够使用得游刃有余,光看懂还不行的,一定要多练习,到了这个境界才是真正的java高手)(我学java有三年了,这是我的体会)还有要提醒你一下,对于初学者,不要使用eclipse编程工具,建议你先用记事本写程序,当你比较熟练了之后就可以...

java学习有哪些课程
Java的学习课程主要有Java基础、Java语言、数据库开发等,想学习Java推荐选择【达内教育】,该机构致力于面向IT互联网行业,培养软件开发工程师、测试工程师、UI设计师、网络营销工程师、会计等职场人才。Java的学习课程:1、对Java有基本认知。2、学习Java基础,包括Java语言、Java语法和各种基本算法,了解...

中国那种编程语言最受公司欢迎
2、Perl Perl ,一般被称为“实用报表提取语言”(Practical Extraction and Report Language)。他于1987年12月18日发表。Perl借取了C、sed、awk、shell ing以及很多其他程序语言的特性。其中最重要的特性是它内部集成了正则表达式的功能,以及巨大的第三方代码库CPAN。简而言之,Perl像C一样强大,象awk...

PHP从入门到精通的图书1
书 名: PHP从入门到精通作 者:潘凯华同名出版社:清华大学出版社出版时间: 2008ISBN: 9787302179597开本: 16定价: 68.00 元 VD语音视频教学光盘22小时教学视频录像,全程语音讲解《PHP从入门到精通》实例源程序、相关素材《PHP从入门到精通》特色基础知识一核心技术一高级应用一项目实战268个应用实例,...

广昌县15369822212: java中用正则表达式一个15位或18位的数字 -
郅龙锐沙: 如果你只需要校验数字身份证号码,不需要带x的可以这么改正则 \\d{15} | \\d{18} 或者 \\d{15}(\\d{3})?

广昌县15369822212: 使用java判断输入身份证号位数是否正确,判断输入是否有效 -
郅龙锐沙: public boolean IDNumIsValid(String number){//判断身份证号是否正确 if(number.length==18){ Matcher m = Pattern.compile("\D").matcher(number); while(m.find()){ if(m.group()!=null){ return false; }else{ return true; } } }else{ return false; } }

广昌县15369822212: 15到18位数怎么在java swing中判断 -
郅龙锐沙: String reg = "^\\d{15,18}$"; String num = "1232323"; if(num.matches(reg)){ //todo }else{ //todo }

广昌县15369822212: 求一个正则表达式,判断一个字符串, 第一位是1 - 9之间,2 - 17位为0 - 9,18位为0 - 9或字母.速度要快. -
郅龙锐沙: js中,请用^[1-9][\d]{16}[\da-zA-Z]$ java中直接[1-9][\d]{16}[\da-zA-Z]

广昌县15369822212: 怎样用java的正则表达式匹配这样的网址 -
郅龙锐沙: Java中正则表达式匹配的语法规则:以下是整理出来的Java下运用正则表达式实现匹配的程序案例,代码如下:package org.luosijin.test;import java.util.regex.Matcher;import java.util.regex.Pattern;/** * 正则表达式 * @version V5.0 * @author ...

广昌县15369822212: java 问题:正则表达式验证身份证该怎么写?包括15位的和18位的,而且后面还可以跟大写的X,怎么写?
郅龙锐沙: /^\d{15}(\d{2}[0-9xX])?$/ ,匹配身份证的正则很多 这个匹配了你上面说的15位 18位或者17位加X

广昌县15369822212: 在Java中如何用正则表达式判断number(26,8)类型?应该怎么写? -
郅龙锐沙: 支持科学记数法,如不需要支持,则可自行简化一下. (?<=^|[^\d\.+-])[+-]?(\d(\.\d{1,26})?E[+-]?(1\d|2[0-5]|0?\d)|\d{0,18}(\.\d{1,8})?)(?<![+-])(?=$|[^\d\.])

广昌县15369822212: java身份证转换 -
郅龙锐沙: import java.text.DateFormat; import java.text.NumberFormat; import java.util.*; import java.io.ByteArrayInputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; public class COMUT { public COMUT() { } /** ** 修补15位居...

广昌县15369822212: 用JAVA来判断你所输入的18位身份证号码的性别 -
郅龙锐沙: 其实只要看倒数第二位的数字,是奇数还是偶数.奇数是男,偶数是女.也就是原先15位身份证号的最后一位,性别区分就看这位数.

广昌县15369822212: JAVA判断一个数字的数位 -
郅龙锐沙: 这有什么难的.你只要以String型接收,然后判断第一位不为零,无小数点,直接length就可以了..如果是浮点数,你用splite方法分割,然后分别判断,整数部分如上.小数部分你判断最后是不是零结尾,有多少个零.length-零的个数+整数的位数就是整个数的位数.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网