国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看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程序設計有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 在线一区二区三区做爰视频网站 | 91精品国产高清一区二区三区 | 中文字幕亚洲欧美日韩在线不卡 | 黄一区 | 国产精品久久久久久久久久久天堂 | 国产精品久久久久久久美男 | 欧美日韩亚洲一区二区 | 欧美精品91 | av在线网址观看 | 久久99精品久久久久久琪琪 | 日韩综合| 日韩激情一区二区三区 | 亚洲精品在线视频 | 国产精品久久 | 欧美综合一区二区三区 | 91在线网站| 久久一二三四 | 在线看片日韩 | 国产成人精品久久二区二区 | 6080yy午夜一二三区久久 | 亚洲国产精品99久久久久久久久 | 亚洲精品视频网站在线观看 | 天天干人人 | 欧美大片免费高清观看 | 亚洲成人精品在线 | 欧美精品1区2区3区 日本电影中文字幕 | 一区在线视频观看 | 久久亚洲综合 | 亚洲国产精品久久久久婷婷老年 | 日韩视频一 | 欧美国产在线观看 | 亚洲男人皇宫 | 国产成人在线一区二区 | 自拍偷拍在线视频 | 日韩有码在线观看 | 最近中文字幕mv免费高清在线 | 成年人激情视频 | 毛片网站大全 | 免费不卡视频 | 久久久国产视频 | 久草中文在线 |