import java.util.*;
创新互联专注为客户提供全方位的互联网综合服务,包含不限于网站制作、成都做网站、双牌网络推广、成都微信小程序、双牌网络营销、双牌企业策划、双牌品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联为所有大学生创业者提供双牌建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
public class Yugi{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("输入身份证号码: ");
String code = scan.nextLine().trim();
scan.close();
String reg = "^(.{6})(.{4})(.{2}).*$";
String a = code.replaceAll(reg, "$1");
String y = code.replaceAll(reg, "$2");
String m = code.replaceAll(reg, "$3");
System.out.println("所在地区代码:" + a);
System.out.println("出生年月: " + y + ", " + m);
}
}
^ 匹配字符串的开始
[1-9] 第1位:1-9
\d{5} 第2-6位:0-9
[1-9] 第7位:1-9
\d{3} 第8-10位:0-9
((0\d)|(1[0-2])):
第11-12位:(00-09)或(10-12)
(([0|1|2]\d)|3[0-1])
第13-14位:(00-29)或(30-31)
\d{3} 第15-17位:0-9
([0-9]|X)
第18位:0-9或X
$ 匹配字符串的结束
/**
* 功能:身份证的有效验证
*
* @param IDStr 身份证号
* @return 有效:返回"" 无效:返回String信息
* @throws NumberFormatException
* @throws ParseException
*/
public static String IDCardValidate(String IDStr) {
String errorInfo = "";// 记录错误信息
String[] ValCodeArr = { "1", "0", "x", "9", "8", "7", "6", "5", "4",
"3", "2" };
String[] Wi = { "7", "9", "10", "5", "8", "4", "2", "1", "6", "3", "7",
"9", "10", "5", "8", "4", "2" };
String Ai = "";
// ================ 号码的长度 15位或18位 ================
if (IDStr.length() != 15 IDStr.length() != 18) {
errorInfo = "身份证号码长度应该为15位或18位。";
return errorInfo;
}
// =======================(end)========================
// ================ 数字 除最后以为都为数字 ================
if (IDStr.length() == 18) {
Ai = IDStr.substring(0, 17);
} else if (IDStr.length() == 15) {
Ai = IDStr.substring(0, 6) + "19" + IDStr.substring(6, 15);
}
if (isNumeric(Ai) == false) {
errorInfo = "身份证15位号码都应为数字 ; 18位号码除最后一位外,都应为数字。";
return errorInfo;
}
// =======================(end)========================
// ================ 出生年月是否有效 ================
String strYear = Ai.substring(6, 10);// 年份
String strMonth = Ai.substring(10, 12);// 月份
String strDay = Ai.substring(12, 14);// 月份
if (isDataFormat(strYear + "-" + strMonth + "-" + strDay) == false) {
errorInfo = "身份证生日无效。";
return errorInfo;
}
GregorianCalendar gc = new GregorianCalendar();
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd");
try {
if ((gc.get(Calendar.YEAR) - Integer.parseInt(strYear)) 150
|| (gc.getTime().getTime() - s.parse(
strYear + "-" + strMonth + "-" + strDay).getTime()) 0) {
errorInfo = "身份证生日不在有效范围。";
return errorInfo;
}
} catch (NumberFormatException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
return errorInfo = "身份证生日无效";
} catch (ParseException e) {
// TODO 自动生成的 catch 块
e.printStackTrace();
return errorInfo = "身份证生日无效";
}
if (Integer.parseInt(strMonth) 12 || Integer.parseInt(strMonth) == 0) {
errorInfo = "身份证月份无效";
return errorInfo;
}
if (Integer.parseInt(strDay) 31 || Integer.parseInt(strDay) == 0) {
errorInfo = "身份证日期无效";
return errorInfo;
}
// =====================(end)=====================
// ================ 地区码时候有效 ================
Hashtable h = GetAreaCode();
if (h.get(Ai.substring(0, 2)) == null) {
errorInfo = "身份证地区编码错误。";
return errorInfo;
}
// ==============================================
// ================ 判断最后一位的值 ================
int TotalmulAiWi = 0;
for (int i = 0; i 17; i++) {
TotalmulAiWi = TotalmulAiWi
+ Integer.parseInt(String.valueOf(Ai.charAt(i)))
* Integer.parseInt(Wi[i]);
}
int modValue = TotalmulAiWi % 11;
String strVerifyCode = ValCodeArr[modValue];
Ai = Ai + strVerifyCode;
if (IDStr.length() == 18) {
if (Ai.equals(IDStr) == false) {
errorInfo = "身份证无效,不是合法的身份证号码";
return errorInfo;
}
} else {
return "";
}
// =====================(end)=====================
return "";
}
身份证号码的地区代码分别是:
1、东北地区: 辽宁省|210000,吉林省|220000,黑龙江省|230000,
2、华北地区:北京市|110000,天津市|120000,河北省|130000,山西省|140000,内蒙古自治区|150000,
3、华东地区: 上海市|310000,江苏省|320000,浙江省|330000,安徽省|340000,福建省|350000,江西省|360000,山东省|370000,
4、华南地区:广东省|440000,广西壮族自治区|450000,海南省|460000,
5、华中地区: 河南省|410000,湖北省|420000,湖南省|430000,
6、西北地区: 陕西省|610000,甘肃省|620000,青海省|630000,宁夏回族自治区|640000,新疆维吾尔自治区|650000,
7、西南地区: 四川省|510000,贵州省|520000,云南省|530000,西藏自治区|540000,重庆市|500000;
8、特别地区:台湾地区(886)|710000,香港特别行政区(852)|810000,澳门特别行政区(853)|820000。
扩展资料:
一、身份证号码是我国为每个公民从出生之日起编定的唯一的、终身不变的身份代码,也是证明持有人身份的唯一证件。
1、前1、2位数字表示:所在省份的代码;
2、第3、4位数字表示:所在城市的代码;
3、第5、6位数字表示:所在区县的代码;
4、第7~14位数字表示:出生年、月、日;
5、第15、16位数字表示:所在地的派出所的代码;
6、第17位数字表示性别:奇数表示男性,偶数表示女性;
7、第18位数字是校检码:用来检验身份证的正确性。校检码可以是0~10的数字,10用x表示。
二、一些人的尾号变成了X,这部分人在工作生活中,例如去银行存取钱、去汽车公司租赁汽车或者报名参加考试等等过程中,往往不被检验者理解,认为是假身份证,这样的误会给很多人的生活带来不便。X的意思其实是10,只不过用罗马数字代替了而已,如果不用罗马数字代替的话,那么身份证号将会变成19位数了。
参考资料:百度百科_居民身份证号码