激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|編程技術|正則表達式|C/C++|

服務器之家 - 編程語言 - JAVA教程 - Java簡單驗證身份證功能示例

Java簡單驗證身份證功能示例

2020-11-08 17:05qq7342272 JAVA教程

這篇文章主要介紹了Java簡單驗證身份證功能,涉及java針對字符串的截取、判斷相關操作技巧,需要的朋友可以參考下

本文實例講述了Java簡單驗證身份證功能。分享給大家供大家參考,具體如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
package org.cxy.csdn.example;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import javax.xml.bind.Validator;
/**
 * 身份證驗證的工具(支持5位或18位省份證)<br/>
 * 身份證號碼結構:
 * <ol>
 * <li>17位數字和1位校驗碼:6位地址碼數字,8位生日數字,3位出生時間順序號,1位校驗碼。</li>
 * <li>地址碼(前6位):表示對象常住戶口所在縣(市、鎮、區)的行政區劃代碼,按GB/T2260的規定執行。</li>
 * <li>出生日期碼,(第七位 至十四位):表示編碼對象出生年、月、日,按GB按GB/T7408的規定執行,年、月、日代碼之間不用分隔符。</li>
 * <li>順序碼(第十五位至十七位):表示在同一地址碼所標示的區域范圍內,對同年、同月、同日出生的人編訂的順序號,
 * 順序碼的奇數分配給男性,偶數分配給女性。</li>
 * <li>校驗碼(第十八位數):<br/>
 * <ul>
 * <li>十七位數字本體碼加權求和公式 s = sum(Ai*Wi), i = 0,,16,先對前17位數字的權求和;
 * Ai:表示第i位置上的身份證號碼數字值.Wi:表示第i位置上的加權因.Wi: 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2;</li>
 *<li>計算模 Y = mod(S, 11)</li>
 *<li>通過模得到對應的校驗碼 Y: 0 1 2 3 4 5 6 7 8 9 10 校驗碼: 1 0 X 9 8 7 6 5 4 3 2</li>
 *</ul>
 *</li>
 *</ol>
 *
 *@author cxy
 */
public class IdcardUtil {
 final static Map<Integer, String> zoneNum = new HashMap<Integer, String>();
 static {
  zoneNum.put(11, "北京");
  zoneNum.put(12, "天津");
  zoneNum.put(13, "河北");
  zoneNum.put(14, "山西");
  zoneNum.put(15, "內蒙古");
  zoneNum.put(21, "遼寧");
  zoneNum.put(22, "吉林");
  zoneNum.put(23, "黑龍江");
  zoneNum.put(31, "上海");
  zoneNum.put(32, "江蘇");
  zoneNum.put(33, "浙江");
  zoneNum.put(34, "安徽");
  zoneNum.put(35, "福建");
  zoneNum.put(36, "江西");
  zoneNum.put(37, "山東");
  zoneNum.put(41, "河南");
  zoneNum.put(42, "湖北");
  zoneNum.put(43, "湖南");
  zoneNum.put(44, "廣東");
  zoneNum.put(45, "廣西");
  zoneNum.put(46, "海南");
  zoneNum.put(50, "重慶");
  zoneNum.put(51, "四川");
  zoneNum.put(52, "貴州");
  zoneNum.put(53, "云南");
  zoneNum.put(54, "西藏");
  zoneNum.put(61, "陜西");
  zoneNum.put(62, "甘肅");
  zoneNum.put(63, "青海");
  zoneNum.put(64, "新疆");
  zoneNum.put(71, "臺灣");
  zoneNum.put(81, "香港");
  zoneNum.put(82, "澳門");
  zoneNum.put(91, "外國");
 }
 final static int[] PARITYBIT = {'1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2'};
 final static int[] POWER_LIST = { 7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10,
  5, 8, 4, 2};
 /**
  *
  * 身份證驗證
  *
  *@param s
  *  號碼內容
  *@return 是否有效 null和"" 都是false
  */
 public static boolean isIdcard(String s){
  if(s == null || (s.length() != 15 && s.length() != 18))
   return false;
  final char[] cs = s.toUpperCase().toCharArray();
  //校驗位數
  int power = 0;
  for(int i=0; i<cs.length; i++){
   if(i==cs.length-1 && cs[i] == 'X')
    break;//最后一位可以 是X或x
   if(cs[i]<'0' || cs[i]>'9')
    return false;
   if(i < cs.length -1){
    power += (cs[i] - '0') * POWER_LIST[i];
   }
  }
  //校驗區位碼
  if(!zoneNum.containsKey(Integer.valueOf(s.substring(0,2)))){
   return false;
  }
  //校驗年份
  String year = s.length() == 15 ? "19" + s.substring(6,8) :s
    .substring(6, 10);
  final int iyear = Integer.parseInt(year);
  if(iyear < 1900 || iyear > Calendar.getInstance().get(Calendar.YEAR))
   return false;//1900年的PASS,超過今年的PASS
  //校驗月份
  String month = s.length() == 15 ? s.substring(8, 10) : s.substring(10,12);
  final int imonth = Integer.parseInt(month);
  if(imonth <1 || imonth >12){
   return false;
  }
  //校驗天數
  String day = s.length() ==15 ? s.substring(10, 12) : s.substring(12, 14);
  final int iday = Integer.parseInt(day);
  if(iday < 1 || iday > 31)
   return false;
  //校驗一個合法的年月日
  if(!validate(iyear, imonth, iday))
   return false;
  //校驗"校驗碼"
  if(s.length() == 15)
   return true;
  return cs[cs.length -1 ] == PARITYBIT[power % 11];
 }
 static boolean validate(int year, int imonth, int iday){
  //比如考慮閏月,大小月等
  return true;
 }
 public static void main(String[] args) {
  for(int i=0;i<10;i++){
   final String s = "41102419871001001111111"+i;
   System.out.println(s+" --> "+isIdcard(s));
  }
 }
}

希望本文所述對大家java程序設計有所幫助。

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25
主站蜘蛛池模板: 黄色免费不卡视频 | 成人wxx视频免费 | 精品久久久久久综合日本 | 国产日韩三区 | 天堂成人国产精品一区 | 黄色大片高清 | 91精品国产成人 | 亚洲午夜久久久精品一区二区三区 | 成年人网站国产 | 日本成人一区二区三区 | 亚洲精品午夜电影 | 黄色视屏免费在线观看 | 美女福利视频国产 | 九九热在线视频免费观看 | 毛片视频网址 | 黄片毛片一级 | 久草在线观看首页 | 狠狠婷婷综合久久久久久妖精 | 高潮激情aaaaa免费看 | 日日做夜夜操 | 欧美亚洲免费 | 亚洲草逼视频 | 91福利社在线 | 少妇一级淫片免费放4p | 免费看污视频在线观看 | 国产永久免费观看 | 久久人添人人爽人人爽人人片av | 99欧美视频| 农村寡妇偷毛片一级 | 天堂精品久久 | 国产三级午夜理伦三级 | 97精品国产高清在线看入口 | 亚洲一区二区三区在线看 | 久久久久久久久日本理论电影 | 日本网站一区二区三区 | 精品人人人人 | 欧美a∨亚洲欧美亚洲 | 96视频在线免费观看 | 国产亚洲精久久久久久蜜臀 | 嗯啊羞羞视频 | 欧美四级在线观看 |