判断是第几代身份证(第一代15位, 第二代18位)
1 if (cardId.length() == 15 || cardId.length() == 18) {
2 if (!this.cardCodeVerifySimple(cardId)) {
3 error.put("cardId", "15位或18位身份证号码不正确");
4 } else {
5 if (cardId.length() == 18 && !this.cardCodeVerify(cardId)) {
6 error.put("cardId", "18位身份证号码不符合国家规范");
7 }
8 }
9 } else {
10 error.put("cardId", "身份证号码长度必须等于15或18位");
11 }
正则校验身份证是否符合第一代第二代标准
1 private boolean cardCodeVerifySimple(String cardcode) {
2 //第一代身份证正则表达式(15位)
3 String isIDCard1 = "^[1-9]\\d{7}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])\\d{3}$";
4 //第二代身份证正则表达式(18位)
5 String isIDCard2 ="^[1-9]\\d{5}[1-9]\\d{3}((0\\d)|(1[0-2]))(([0|1|2]\\d)|3[0-1])((\\d{4})|\\d{3}[A-Z])$";
6
7 //验证身份证
8 if (cardcode.matches(isIDCard1) || cardcode.matches(isIDCard2)) {
9 return true;
10 }
11 return false;
12 }
验证第二代身份证是否符合国家规范
1 private boolean cardCodeVerify(String cardcode) {
2 int i = 0;
3 String r = "error";
4 String lastnumber = "";
5
6 i += Integer.parseInt(cardcode.substring(0, 1)) * 7;
7 i += Integer.parseInt(cardcode.substring(1, 2)) * 9;
8 i += Integer.parseInt(cardcode.substring(2, 3)) * 10;
9 i += Integer.parseInt(cardcode.substring(3, 4)) * 5;
10 i += Integer.parseInt(cardcode.substring(4, 5)) * 8;
11 i += Integer.parseInt(cardcode.substring(5, 6)) * 4;
12 i += Integer.parseInt(cardcode.substring(6, 7)) * 2;
13 i += Integer.parseInt(cardcode.substring(7, 8)) * 1;
14 i += Integer.parseInt(cardcode.substring(8, 9)) * 6;
15 i += Integer.parseInt(cardcode.substring(9, 10)) * 3;
16 i += Integer.parseInt(cardcode.substring(10,11)) * 7;
17 i += Integer.parseInt(cardcode.substring(11,12)) * 9;
18 i += Integer.parseInt(cardcode.substring(12,13)) * 10;
19 i += Integer.parseInt(cardcode.substring(13,14)) * 5;
20 i += Integer.parseInt(cardcode.substring(14,15)) * 8;
21 i += Integer.parseInt(cardcode.substring(15,16)) * 4;
22 i += Integer.parseInt(cardcode.substring(16,17)) * 2;
23 i = i % 11;
24 lastnumber =cardcode.substring(17,18);
25 if (i == 0) {
26 r = "1";
27 }
28 if (i == 1) {
29 r = "0";
30 }
31 if (i == 2) {
32 r = "x";
33 }
34 if (i == 3) {
35 r = "9";
36 }
37 if (i == 4) {
38 r = "8";
39 }
40 if (i == 5) {
41 r = "7";
42 }
43 if (i == 6) {
44 r = "6";
45 }
46 if (i == 7) {
47 r = "5";
48 }
49 if (i == 8) {
50 r = "4";
51 }
52 if (i == 9) {
53 r = "3";
54 }
55 if (i == 10) {
56 r = "2";
57 }
58 if (r.equals(lastnumber.toLowerCase())) {
59 return true;
60 }
61 return false;
62 }